Bağlantısı kesilmiş bir ssh oturumuna nasıl yeniden bağlanılır


156

Bağlantısı kesilmiş bir ssh oturumuna bağlanmanın bir yolu var mı? Ayrı olarak üzerinde çalıştığımız uzak bir siteye ağ bağlantımızda sorun yaşıyoruz; Bununla birlikte, bu süre zarfında, uzak konumdaki sunuculara bağlıyken, kayıp paketlerden dolayı çok sayıda bağlantı kopması yaşıyoruz. Çoğu zaman oturum bir süre aktif kalır ve bazen mümkünse yeniden başlatmak yerine geri almam gereken bazı işlemlerin (dosya düzenleme, bazı işlemleri yürütme vb.) Ortasında olur.


10
Hiç kimse söz inanamıyorum mosh.mit.edu
jwbensley

@javano: Hiç duymadım. Bunu bir cevap olarak ekle!
kbyrd

@kbyrd Yaptım;)
jwbensley

benzer bir soru, unix.stackexchange.com/questions/105001/… ' de, ilk etapta bağlantı kopmalarının nasıl çözüleceğine dair bazı ipuçları veren bazı sorularla soruldu ...
anarcat

Yanıtlar:


135

GÜNCELLEME: Gerçek bir cevap için aşağıdaki zero_r cevabı bakınız

Bu bir cevap değil, geçici bir çözümdür. Ekranı kullanın .

İlk giriş yaptığınızda ekranı çalıştırın. Başka bir kabuk alırsın, komutları çalıştır. Bağlantınız kesilirse, ekran işlemi terminali canlı tutar, böylece kabuğunuz ve çalıştığı işlemler bozulmaz. Yeniden bağlandığınızda, devam etmek için 'screen -r' komutunu çalıştırın.

Ekranı yapılandırmak ve kullanmak için daha çok şey var, ancak yukarıdaki sorununuzu çözmelidir.


18
Veya 'serin' bir ekran olan tmux'u kullanın, her ikisini de kullandım ve tmux'u tercih ediyorum, çünkü terimi güzelce bölebilirsiniz.
John Hunt

3
screenUbuntu 12.x cihazımda zaten yüklü olduğunu bulmaktan mutlu oldum, bu yüzden bu komutu denemekten emin değilseniz, yeniden başlatma ve yükseltme-yükseltme işlemine devam etti : sudo screen -D -r
bjm88

1
@ bjm88, sudoyalnızca orijinal ekran oturumu sudo ile başlatılmışsa kullanılmalıdır. Aksi takdirde, herhangi bir ekran oturumu yokmuş gibi dönecektir:There is no screen to be detached
Noam Manos,

+1 Bunun asıl cevap olmadığını biliyorum; Ancak, screen -rtam olarak aradığım şeydi.
Eric Nelson

129

ClientAliveInterval (örn. 60) ve TCPKeepAlive (evet ya da hayır) sshd.conf sunucusundaki uygun değerlere ayarlamayı deneyin.

Bağlantı dakikalarca kaybolsa bile, oturumunuzu canlı tutmalısınız.


24
Şimdiye kadar, ekranı geçici bir çözüm olarak önermek yerine soruyu yanıtlayan tek kişi sizsiniz.
kbyrd

2
İyi karar. Bu yöntemi özellikle tcp bağlantılarını zaman aşımına uğratan cisco ASA / PIX güvenlik duvarlarını geçerken özellikle yararlı bulduk.
Mike Pountney

5
Belki sormak için doğru yer burası değildir, ancak posterin cevapları değiştirmesi mümkün mü? 'Ekran' cevabını vermeliyiz (benimki en iyisi değil, Mike Pountney'inkilerden hoşlandım, ancak temsilcisi aldım).
kbyrd

1
Bir Cisco VPN bağlantısı üzerinden bağlanıldığında ve VPN bağlantısı kopup yeniden kurulduğunda bu işe yarar mı?
Brent,

benim için ekran mükemmel çalışıyor, ekranlı göreve yeniden bağlanabilir ve işe
integratorIT

64

Yukarıda da belirtildiği gibi, GNU Ekranı gitmenin yoludur. Uzak kutuda, birden fazla 'ekran penceresi' üzerinden birden fazla komut çalıştırabileceğiniz bir 'ekran oturumu' olmasına izin verir. Bu, üst SSH bağlantınız koparsa, içindeki tüm alt işlemleri canlı ve iyi durumda tutarken kolayca ayrılır.

' man screen' her zamanki gibi arkadaşınız ve screenvarsayılan olarak yüklenmemişse , işletim sistemi paketi ' ' olarak adlandırılmalıdır .

Temel bilgiler:

  • Bir ekran oturumu başlatın (uzaktaki ana makinenizde):

    $ screen
    
  • Ekran oturumdan ayırın: CTRL-A,d

  • Tekrar oturum açtıktan sonra ekran oturumunuza tekrar bağlanın:

    $ screen -d -r
    
  • Başka bir ekran 'penceresini' aç: CTRL-A,c

  • Eğer açık ekran pencereler arasında geçiş: CTRL-A,space

Orada bir sürü sen Screen ile yapabileceğiniz güzel şeyler. 10 yıldan beri kullanıyorum ve hala yeni özellikler buluyorum. Bu benim en sevdiğim Unix yardımcı programı.


1
Evet, bu benimkinden çok daha iyi bir cevap.
kbyrd

Ekranım çalışıyorken bilgisayarımı yeniden başlatırsam, hala bağlı olmayan ssh oturumuna bağlanabilir miyim?
BarathVutukuri

tmux daha güçlü
Pegasus

46

Kimsenin MOSH'den bahsetmediğine inanamıyorum ;

Mosh, SSH oturum açma sürecine bağlanabilecek ayrı bir protokoldür, bağlantınızı koparma, IP değiştirme, gecikme gibi günlerden sonra oturumunuzu canlı tutar. Ana sayfada açıklayabileceğimden daha iyi açıklandı, bu yüzden aşağıdaki açıklamayı kopyaladım. Tecrübelerim ve tavsiyem, Android cep telefonumda kullanmam, seyahat ederken ve SSH' yaparken hayat kurtarıcı. Aynı şey mesela trende cep telefonu ile bağlandığında dizüstü bilgisayarımda da geçerlidir. En son sürüme ulaşmak için kaynaktan derlemeyi öneririm, Ubuntu içindeki benim için repo sürümünün içinde (en yeni sürümde (yazı yazarken) sabit olan) birkaç sıkıntı var.

Mosh (mobil kabuk)

Dolaşmaya izin veren, aralıklı bağlantıyı destekleyen ve kullanıcı tuş vuruşlarının akıllı yerel yankı ve çizgi düzenlemesini sağlayan uzak terminal uygulaması.

Mosh, SSH'nin yerine geçti. Özellikle Wi-Fi, hücresel ve uzun mesafeli bağlantılar üzerinden daha sağlam ve duyarlı.

Mosh, GNU / Linux, FreeBSD, Solaris, Mac OS X ve Android için kullanılabilen ücretsiz bir yazılımdır.

Web sitesinden özellikler:

  • IP’yi değiştirin. Bağlı kalın : İnternet bağlantıları arasında hareket ederken Mosh otomatik olarak dolaşıyor. Trende Wi-Fi, bir otelde Ethernet ve bir sahilde LTE kullanın: oturumunuzu açık tutarsınız. Çoğu ağ programı, SSH ve Gmail gibi Web uygulamaları da dahil olmak üzere dolaşımdan sonra bağlantılarını kaybeder. Mosh farklı.

  • Tatlı rüyalar için yapar : Mosh ile, dizüstü bilgisayarınızı uykuya sokup daha sonra uyanıp bağlantınızı koruyabilirsiniz. İnternet bağlantınız koparsa, Mosh sizi uyaracak - ancak şebeke servisi geri geldiğinde bağlantı devam edecektir.

  • Ağ gecikmesinden kurtulun : SSH, kendi yazınızı göstermeden önce sunucunun yanıtını bekler. Kötü bir kullanıcı arayüzü için yapabilir. Mosh farklıdır: yazma, silme ve satır düzenlemeye anında yanıt verir. Bunu uyarlamalı yapar ve emacs ve vim gibi tam ekran programlarda bile çalışır. Kötü bir bağlantıda, olağanüstü tahminlerin altı çizilidir, böylece yanlış yönlendirilmeyeceksiniz.

  • Ayrıcalıklı kod yok. Arka plan yok : Mosh'u kurmak veya çalıştırmak için süper kullanıcı olmanıza gerek yok. İstemci ve sunucu sıradan bir kullanıcı tarafından çalıştırılabilir ve yalnızca bağlantının ömrü boyunca devam eder.

  • Aynı giriş yöntemi : Mosh ağ bağlantı noktalarında dinleme yapmıyor veya kullanıcıların kimliğini doğrulamıyor. Mosh istemcisi, sunucuya SSH üzerinden oturum açar ve kullanıcılar önceden olduğu gibi aynı bilgileri (örneğin, şifre, genel anahtar) sunar. Sonra Mosh mosh sunucusunu uzaktan çalıştırır ve UDP üzerinden bağlar.

  • Terminalinizin içinde çalışır, ancak daha iyisi : Mosh, ssh gibi bir komut satırı programıdır. Xterm, gnome-terminal, urxvt, Terminal.app, iTerm, emacs, screen veya tmux içinde kullanabilirsiniz. Ancak mosh sıfırdan tasarlandı ve sadece bir karakter setini destekliyor: UTF-8. Diğer terminallerdeki ve SSH'deki Unicode hatalarını giderir.

  • Control-C harika çalışıyor : SSH'nin aksine, Mosh'un UDP tabanlı protokolü paket kaybını incelikle ele alıyor ve kare hızını ağ koşullarına göre ayarlıyor. Mosh ağ arabelleklerini doldurmuyor, bu nedenle Control-C
    her zaman kaçak süreci durdurmak için çalışıyor.


8
Mosh bir ssh sarmalayıcısı değildir - neredeyse tamamen ssh ile ilgisi olmayan farklı bir protokoldür (sadece oturum açmak için ssh kullanır).
jch

+1 Çok doğru, benim hatam.
jwbensley

2
Peki ya güvenlik, ortadaki adam? şifreleme? anahtar değişimi?
Nasir Iqbal,

Ne yazık ki henüz liman yönlendirmeyi desteklemese de, Mosh harika görünüyor .
Boann

20

autossh bağlantınızı izler ve aşağı inerse tekrar bağlanır. Kalıcılardan daha güvenilir. Bir ekran oturumuna bağlanırsanız, bağlantısı kesildiğiniz yerden devam edersiniz ( rscreenautossh ile geliyor)


1
yapılandırılabilir bir canlı tutma dışında, doğal olarak bir oturuma yeniden bağlanmanıza izin vermez (OP'nin aradığı şey). ama autossh, ssh tünelleri, port haritalama, vb. gerektiren uygulamalar için gerçekten yararlı olabilir
ives

evet autossh + ekran tatlı nokta olurdu. autossh bunun rscreeniçin var.
hayalci

Autossh mosh'dan iyidir. İkisini de kullandım.
Sridhar Sarnobat 15:17

İşte Jesse Keating tarafından yazılan, autossh'u ekranla kullanma hakkında bir blog yazısı .
sampablokuper

12

tmux

Bu bir klasik. Bir terminale olan bağlantıyı kaybetme riskiyle karşılaştığınızda kullanın.

$ tmux
$ sh do_something_that_takes_forever

!! Connection fails so you reconnect once you notice

$ tmux ls
0: 1 windows (created Tue Aug 23 12:39:52 2011) [103x30]

$ tmux attach -t 0

Aynen böyle, tekrar harekete geçtiniz.


Bir ton teşekkürler! Bunu tmux ile nasıl yapacağımı düşünüyordum, çünkü çoğu insan daha iyi seçenek olarak kabul ediyor gibi görünüyor.
CoolOppo

10

Sorununuzu çözmek için ekranı yükler ve ekranı başlatırdım. Ekran önceki ekran oturumuna tekrar bağlanmanıza izin verecektir.

Bunun dışında ekran, ekranı bölme, konsolu görüntüleme vb. Gibi harika şeyler yapmanıza izin verir . Burada ve burada daha fazla bilgi bulabilirsiniz .

Başlangıç ​​olarak, bağlantınız kesilirse kullanabilirsiniz.

screen -ls

oturumlarınızı görüntülemek için ve

screen -r ${session} 

bağlantısı kesilmiş bir bağlantıya


4

Diğerlerinin de belirttiği gibi, ekran bunun için en iyi çözümdür ve başka faydalı özelliklere de ev sahipliği yapar.

Profilinizi uzaktaki makinede oturum açma ekranına otomatik olarak başlayacak ve / veya ekrana yeniden bağlanacak şekilde ayarlayabilirsiniz, bu sayede bir bağlantı kopmasıyla ekrana başlamanızı unutmanızı sağlar.

Bkz http://tlug.dnho.net/?q=node/239 (veya diğer birçok örnekler klonlarının biraz farklı yolları için Google'da arama).


3

ekrana daha modern bir alternatif, ne yazık ki bazı "sanallaştırma" türleri için mevcut değil (örneğin, cygwin'de "ekrana sahip olabilirsiniz, ancak tasarlandığı şekli nedeniyle" tmux "a sahip değilsiniz) , Ekrana girilmiş biri için gitmenizi şiddetle tavsiye ederim.


3

İşte başka bir ekran dışı çözüm.

Macun tepsisi tam olarak bunu yapmanıza izin verir, normal veya macun içinde olmayan yeniden bağlantı kesme seçeneğine sahiptir.

https://puttytray.goeswhere.com/

diğer seçeneklerle birlikte (tamamen açık kaynaklı) bir macun çatal, bağlantı ayarlarına gidin ve biri 'bağlantı arızasına yeniden bağlanmayı denemek' ve 'başlangıçta yeniden bağlanmayı denemek için' olmak üzere 2 seçenek var.


1
Ehh. Herhangi bir şans eseri bir keylogger ve otomatik bir ppk exfiltration programı ile birlikte geliyor mu?
Deer Hunter

1
Bir şekilde, bilgilerinizi çalıp çalmadığını , tamamen açık bir kaynak olup olmadığını sorduğunuzu varsayalım , kaynak kodunu github'da bulabilirsiniz ; github.com/FauxFaux/PuTTYTray : )
munkiepus

büyük şerefe :)
munkiepus

2

Ekran, ssh oturumunuz düştüğünde kabuk oturumunuzu uzak sunucuda açık tutacak olsa da, ssh bağlantılarının kesilmesiyle ilgili hiçbir şey yapmaz. Zero_r'nin önerdiği gibi, ssh bağlantınızı canlı tutmak ve uzun zaman aşımları ile ayarlamayı deneyin.

Sorunlara neden olan kayıp paketlerin nedenini bulmanızı ve etrafta çalışmak yerine düzeltmenizi öneririm.


Önerin için teşekkürler. Paket kaybının kök problemini takip etmeye çalışıyoruz, bunu çözmesi biraz zaman alıyor (çok zor, bu!). Bu gerçekten bu sorun dönemi için bir uğraş. Bir şey ne zaman bir bağlantının kopmasına neden olacağını asla bilemez.
soluk

1
Çok fazla ses çıkarır, ancak ssh'nin strace üzerinden geçmesini deneyebilir ve ssh bağlantısı koptuğunda ne yaptığını / rapor ettiğini görebilirsiniz. Sadece bildiklerini zaten bildirebilir, ama kim bilir ...
David

1

Bazen de ekranı çalıştırmayı ve bitmemiş işimi kaybetmeyi unuttum. Bu durumda, bozulmuş bir SSH oturumuna yeniden bağlanamasak da, çalışan bir programı yeni bir terminale geri almak ve yaptığınız işi devam ettirmek sayesinde hala mümkündür reptyr.

Yanlışlıkla SSH oturumuyla bağlantısının kesilmesinden sonra, ilk önce screenbağlantının tekrar kopması durumunda ilk olarak çalışılması gerekir. Ardından yeni oturumda, ps aux | grep {The process to be resumed}PID'yi almak için çalıştırın . PID ile, çalışmaya devam etmek için reptyr {PID}veya reptyr -T {PID}(alt işlemler varsa) deneyebilirsiniz .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.