it-swarm.asia

Bağlantısı kesilmiş bir ssh oturumuna yeniden bağlanma

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; ancak bu arada uzak konumdaki sunuculara bağlanırken kayıp paketler nedeniyle çok sayıda bağlantı kesilmesi yaşanır. Çoğu zaman oturum bir süre aktif kalır ve bazen mümkünse yeniden başlatmak yerine geri almam gereken bazı eylemlerin ortasında (dosya düzenleme, bazı işlemleri çalıştırma vb.) Olur.

164
palehorse

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

Bu bir cevap değil, bir çözüm. ekran kullanın.

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

Ekranı yapılandırmak ve kullanmak için bir sürü şey var, ancak yukarıdaki sorununuzu çözecektir.

142
kbyrd

ClientAliveInterval (örn. 60) ve TCPKeepAlive (evet veya hayır), sshd.conf sunucularındaki uygun değerlere ayarlamaya çalışın.

Bu, bağlantı dakikalarca kaybolsa bile oturumunuzu canlı tutmalıdır.

134
zero_r

Yukarıda belirtildiği gibi, GNU Screen gidilecek yol. Uzak kutuda, birden çok 'ekran penceresi' aracılığıyla birden fazla komut çalıştırabileceğiniz bir 'ekran oturumu' yapmanızı sağlar. Bu, üst SSH bağlantınız kesilirse, içindeki tüm alt süreçleri canlı ve iyi çalışır halde tutar.

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

Temel bilgiler:

  • Bir ekran oturumu başlatın (uzak Ana Makinenizde):

    $ screen
    
  • Ekran oturumunuzla bağlantıyı kesin: CTRL-Ad

  • Tekrar giriş yaptıktan sonra ekran oturumunuza yeniden bağlanın:

    $ screen -d -r
    
  • Başka bir ekran 'penceresi' açın: CTRL-Ac

  • Açık ekran pencereleriniz arasında dolaşın: CTRL-Aspace

Var çok Ekran ile yapabileceğiniz harika şeyler. 10 yılı aşkın bir süredir kullanıyorum ve hala yeni özellikler buluyorum. Bu benim en sevdiğim Unix yardımcı programı.

64
Mike Pountney

Kimsenin bahsetmediğine inanamıyorum MOSH ;

Mosh, SSH giriş sürecine bağlanabilen ayrı bir protokoldür, bağlantı kesildikten, IP değiştirdikten, yüksek gecikme süresinden vb. Sonra oturumunuzu canlı tutar. Ana sayfada açıklayabildiğimden daha iyi açıklandı, bu yüzden aşağıdaki açıklamayı kopyaladım. Deneyimlerim ve tavsiyem, Android mobil cihazımda kullanmam, seyahat ederken ve SSH'ing'de hayat kurtarıcı olması. Örneğin, trende mobil cihazla bağlandığında dizüstü bilgisayarımda da aynı En son sürümü almak için kaynaktan derlemenizi öneririm, Ubuntu içinde benim için repo sürümü, en yeni sürümde (yazma sırasında) düzeltilmiş birkaç sıkıntıya sahiptir.

Mosh (mobil Kabuk)

Dolaşım sağlayan, aralıklı bağlantıyı destekleyen ve kullanıcı tuş vuruşlarının akıllı yerel eko ve satır düzenlemesini sağlayan uzak terminal uygulaması.

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

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

Web sitesinden özellikler:

  • IP'yi değiştirin. Bağlı kalın : İnternet bağlantıları arasında dolaşırken Mosh otomatik olarak dolaşır. Trende Wi-Fi, bir otelde Ethernet ve bir plajda LTE kullanın: oturumunuz açık kalacak. Dolaşımdan sonra çoğu ağ programı SSH ve benzeri Web uygulamaları dahil olmak üzere bağlantılarını kaybediyor Gmail, Mosh farklı.

  • Tatlı rüyalar yapar : Mosh ile dizüstü bilgisayarınızı uyku moduna geçirebilir ve daha sonra uyandırarak bağlantınızı koruyabilirsiniz. İnternet bağlantınız kesilirse, Mosh sizi uyaracaktır - ancak ağ hizmeti geri geldiğinde bağlantı devam edecektir.

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

  • Ayrıcalıklı kod yok. Arka plan programı yok : Mosh'ı 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ılan yürütülebilir dosyalardır ve yalnızca bağlantının ömrü boyunca devam eder.

  • Aynı giriş yöntemi : Mosh ağ bağlantı noktalarını dinlemiyor veya kullanıcıların kimliğini doğrulamıyor. Mosh istemcisi SSH aracılığıyla sunucuda oturum açar ve kullanıcılar daha önce olduğu gibi aynı kimlik bilgilerini (ör. Parola, genel anahtar) sunar. Sonra Mosh mosh sunucusunu uzaktan çalıştırır ve UDP üzerinden ona bağlanır.

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

  • Control-C harika çalışıyor : SSH'nin aksine, mosh'un UDP tabanlı protokolü paket kaybını nazikçe ele alıyor ve ağ hızına göre kare hızını ayarlıyor. Mosh ağ arabelleklerini doldurmuyor, bu yüzden Control-C
    her zaman kontrolden çıkma sürecini durdurmak için çalışır.

47
jwbensley

autossh bağlantınızı izler ve bağlantı kesilirse yeniden bağlanır. Kalıcılardan daha güvenilirdir. Bir ekran oturumuna bağlanırsanız, bağlantıyı kestiğiniz yerden devam edersiniz (autossh ile gelen rscreen konusuna bakın)

20
hayalci

tmux

Bu bir klasik. Bir terminale olan bağlantıyı kaybetme riski taşıdığı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.

14
Jacksonkr

Sorununuzu çözmek için ekranı yükler ve başlatırım. Ekran, önceki bir ekran oturumuna yeniden bağlanmanızı sağlar.

Bunun dışında, ekran aynı zamanda ekran bölme, konsol vb görüntülemek gibi serin şeyler yapalım. Daha fazla bilgi bulabilirsiniz burada ve burada .

Yeni başlayanlar için, bağlantınız kesilirse,

screen -ls

oturumlarınızı görüntülemek ve

screen -r ${session} 

bağlantısı kesilmiş olana yeniden bağlanmak için.

10
wzzrd

Diğerlerinin de belirttiği gibi, ekran genellikle bunun için en iyi çözümdür ve diğer kullanışlı özelliklerin birçoğunu da ekler.

Profilinizi uzaktaki makinede oturum açtığınızda ekrana otomatik olarak başlayacak ve/veya yeniden bağlanacak şekilde ayarlayabilirsiniz; bu, bağlantı düştüğünüz için ekranı ihtiyacınız olduğunda bir kez başlatmayı unutmanızı sağlar.

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

4
David Spillett

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

PuTTY tepsisi, bunu yapmanıza izin verir, bağlantı kesildiğinde yeniden bağlanma seçeneği vardır, normal veya PuTTY-ng

https://puttytray.goeswhere.com/

puTTY'nin diğer seçeneklerle birlikte (tamamen açık kaynak) bir çatalı, bağlantı ayarlarına gidin ve biri 'bağlantı arızasında yeniden bağlantı kurma girişimi' ve 'başlangıçta yeniden bağlantı kurma girişimi' için olmak üzere 2 seçenek vardır.

3
munkiepus

ekrana daha modern bir alternatif, bazı "sanallaştırma" türleri için mevcut olmayan ne yazık ki (örneğin cygwin'de "ekran" olabilir, ancak tasarlanma şekli nedeniyle "tmux" olmayabilir), ancak tmux'u yükleme seçeneğiniz varsa , Bir ekran insted için gitmek şiddetle tavsiye ediyorum.

3
cepal

Ekran, ssh oturumunuz düşerse Shell oturumunuzu uzak sunucuda açık tutarken, ssh bağlantılarının bırakılması sorunu hakkında hiçbir şey yapmaz. Sıfır_r'ın önerdiği gibi, ssh bağlantınızı canlı tutma ve uzun zaman aşımları ile ayarlamayı deneyin.

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

2
David

Bazen ekranı da çalıştırmayı ve bitmemiş çalışmamı kaybetmeyi unuttum. Bu durumda, bozuk bir SSH oturumuna yeniden bağlanamasak da, çalışan bir programı yeni bir terminale yeniden sunmak ve yaptığınız işe devam etmek reptyr sayesinde hala mümkündür.

Bir SSH oturumuyla yanlışlıkla bağlantıyı kestikten sonra, ilk önce bağlantının tekrar kesilmesi için screen çalıştırmaktır. Ardından yeni oturumda ps aux | grep {The process to be resumed} PID almak için. PID ile reptyr {PID} veya reptyr -T {PID} (alt işlemler varsa) çalışmaya devam etmek için.

2
march_happy