SSH oturumunun OS X Terminalinde takılmasını nasıl önleyebilirim?


101

Ne zaman MacBook'umu kapatmak Terminal aktif SSH oturumu ile ve sonra uyanmak, istemi tepkisiz gider.

Yaklaşık beş dakika içinde

Write failed: Broken pipe

ve sonlandırır.

Ben zaman da gerçekleşir yazmayın yaklaşık on beş dakika içinde Terminal'de şey.

OS X'i aşağıdakilere zorlayabilir miyim:

  1. SSH bağlantısını mümkün olan en uzun süre canlı tutun
  2. Tepki vermez hale geldiğinde hemen öldür

?

Yanıtlar:


121

Bağlantıyı canlı tutmak için , /etc/ssh/ssh_configyazdığınız bağlantıyı kontrol edebilirsiniz ; bu ServerAliveInterval, bilgisayarınızın bağlantıyı canlı tutmak için ne kadar sıklıkla (saniyeler içinde) boş bir paket göndereceğini bildirir. Bilgisayarınızda bağlantıyı canlı tutmaya çalışmadığını belirten bir 0 varsa (devre dışı bırakılmışsa), aksi halde yukarıda belirtilen paketi ne kadar sık ​​(saniye cinsinden) gönderdiğini size söyler. 120 ya da 240 yazmayı deneyin, eğer hala bağlantınızı öldürüyorsa, belki 5'e düşebilir, eğer bu sayı olmazsa, belki de bağlantıyı boş hafızaya bırakan yönlendiricinizdir.

Telefonu kapattığında onu öldürmek için ssh escape karakterini kullanabilirsiniz:

~.

Başka bir deyişle, tilde basın ve ardından işe yaramazsa, süreye basmadan önce Enter tuşuna basarak bağlantıyı derhal keser.


3
Tamam, bağlantıyı kesebilirsin ~., harika bahşiş! Ama aslında ne işe yarıyor?
Kuzen Kokain

Ben Hava oldu ya da değil hakkında karıştı tek şey sshd yeniden zorunda kaldı, ama sadece oturumdan çıkılırken ve bağlamadan hüner yaptığı gibi görünüyor
dgig

Genellikle ~. birkaç dakika benim için çalışmıyor. Neden?
Sridhar Sarnobat

2
Yeri ssh_configolan /etc/ssh/ssh_configCevabın kendim düzenlemek olacaktır Mac OS X'te, ama bunu yapmak için bu sitede yeterince temsilcisi yok.
Erik B,

Bunu müşteriye mi yoksa sunucuya mı koymalıyım? Bence müşteri, ancak daha net olabilir.
EralpB

23

Yapabilirsin:

Sisteminizi, sistem genelinde, tüm bağlantılar için yapılandırın. Düzenleyerek: / etc / ssh / ssh_config Ve satırı ekleyin:

ServerAliveInterval 10

Veya, sunucu başına ~ / .ssh / config

Host keepsdroppingme.com
   ServerAliveInterval 10

Temelde yazdığı şey, her 10 saniyede bir canlı kalmaya devam etmesini sağlar.


9

Ayrıca harika mosh projesini kullanmayı deneyebilirsiniz . Ağ kayıplarını, makinelerin uyuyacağını vb. İncelikle ele alır ve tekrar çalışan bir ağınız olduğunda bağlantıyı mutlu bir şekilde geri yükler.

Daha onur duyulan bir başka çözüm ise uzak makinede tmux kullanmak . Bu durumda hala kırılmış bir boru alabilirsiniz, ancak kabuğunuzu yeniden bağlarsanız uygulamalar tam onları bıraktığınız gibi bekleyecektir.


Aslında, tam olarak şu an yapıyorum.
Dan

5

Buradaki çeşitli cevaplar, config dosyalarına giden tam yolla ilgili çakışmaktadır. Belki farklı unixlerde farklıdır? Sisteminizdeki man sayfalarını okumanızı öneririm!

Gelen adam ssh (1) , metni aramak: yapılandırması . Sistemimde, sistem genelinde veya bu kullanıcı yapılandırma dosyalarında (ve yollar tuhaf bir şekilde farklı) bir seçeneğim var.

Gelen adam ssh_config (5) : metni aramak hayatta . Her ikisi de ayarlamanız gerekir gibi benim sistemde, görünüşe ServerAliveInterval ve ServerAliveCountMax .

Benim için işe yarayan, macOS 10.12 Sierra'da ~ / .ssh / config içine şu iki satırı koymak:

ServerAliveInterval 20
ServerAliveCountMax 180

Artık 20 * 180 saniye = 1 saat bağlantı kesilmeden Ubuntu 16.04 sunucuma ssh yapabilirim. Günümü şenlendirdin!


3

Uyku veya wifi kesintisinden sonra ssh'yi otomatik olarak yeniden bağlayın

  1. MacPorts veya Homebrew'dan autossh'u kurun :brew install autossh

  2. Terminal'i açın ve çalıştırın autossh -M 20000 -f [SSH ARGUMENTS GO HERE]

  3. Wifi bağlantısını kesin ya da Mac'inizi uyku moduna geçirin.

  4. Wifi'a yeniden bağlandığınızda, ssh oturumu otomatik olarak yeniden bağlanacaktır.


Giriş yaptıktan sonra otomatik olarak ssh

Jon Stacey, oturum açtığınızda otomatik olarak bir ssh oturumunu etkinleştirme hakkında bir blog yazısı yazdı .

  1. MacPorts veya Homebrew'dan autossh'u kurun :brew install autossh

  2. Bir bash betiği ile bir Automator iş akışı oluşturun .

Automator kabuk betiği

  1. Git öğeleri giriş de Sistem Tercihleri .

Sistem Tercihleri> Giriş öğeleri

  1. Senin ekleyin Otomatikleştirici iş akışı için öğeleri giriş .

Giriş öğeleri


1

Bu iki satırı şuraya ekle /etc/ssh/ssh_config:

ServerAliveInterval 60
TCPKeepAlive yes

1

Sadece bu sorunu çözdükten sonra aşağıdaki satırları ekleyin $HOME/.ssh/config.

Host *
  ServerAliveInterval 120
  TCPKeepAlive no

Ayarlama TCPKeepAlive no, istemciye, bir kullanıcı isteği tarafından aksi belirtilmedikçe bağlantının hala iyi olduğunu varsaymasını söyler; bu, ssh teriminiz arka planda boşta otururken geçici bağlantının kopması anlamına gelir.

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.