bağlantı kesildiğinde ve ssh açıkken terminal askıda kalıyor


18

Bir gnome terminal sekmesinde internet üzerinden bir sunucuya ssh yaptığımda, internet bağlantısını kaybedersem, terminal sekmesi asılır ve herhangi bir girişi kabul etmez. Neden asıldı?

Terminal sekmesini etkinleştirmenin, yani yerel kabuk işlemini çalıştırmaya devam etmesinin bir yolu var mı?

Terminal sekmesini kapatmak tek yol mu?

Yanıtlar:


20

SSH bağlantısı, belirlenen bir süre ClientAliveIntervalve ClientAliveCountMaxparametreler ile istemci tarafı eşdeğerleri sonrasında otomatik olarak kesilir . Bu zaman aşımları oldukça yüksekse donmuş bir kabuk yaşayacaksınız. Ancak, kullanıyorsanız OpenSSHzaman aşımı için beklemenize gerek yoktur ve çıkış karakterlerini kullanarak bir bağlantıyı kapatmaya zorlayabilirsiniz :

ESCAPE CHARACTERS
When a pseudo-terminal has been requested, ssh supports a number
of functions through the use of an escape character.  A single
tilde character can be sent as ~~ or by following the tilde by a
character other than those described below. The escape character
must always follow a newline to be interpreted as special. The
escape character can be changed in configuration files using the
EscapeChar configuration directive or on the command line by the
-e option.
The supported escapes (assuming the default ‘~’) are:

~.
    Disconnect.
(...)

Bağlantı donduğunda tuşuna basın ~( Shift+ `tuşları birlikte anlamına gelir ), bırakın ve tuşuna basın .. Alternatif olarak, dengesiz bir bağlantıyla çalışıyorsanız veya kaybedilen bağlantıyı otomatik olarak yenilemek için autossh'i kullanabileceğiniz her zaman uzak sunucuya bağlanmanız gerekiyorsa, çok kullanışlıdır.

DÜZENLE :

Bununla birlikte, her ikisi de ClientAliveIntervalve ServerAliveIntervalaçıkça 0 olarak ayarlanmışsa veya açıkça ayarlanmamışsa ve sonra sshd_configve ssh_configsayfalara göre varsayılan olarak 0 olarak ayarlanmışsa, zaman aşımı ayarları aşağıdaki dosyalarda ayarlanır ( http://tldp.org/HOWTO/TCP- Keepalive-NASIL / usingkeepalive.html ):

  # cat /proc/sys/net/ipv4/tcp_keepalive_time
  7200

  # cat /proc/sys/net/ipv4/tcp_keepalive_intvl
  75

  # cat /proc/sys/net/ipv4/tcp_keepalive_probes
  9

  The first two parameters are expressed in seconds, and the last is
  the pure number. This means that the keepalive routines wait for
  two hours (7200 secs) before sending the first keepalive probe,
  and then resend it every 75 seconds. If no ACK response is
  received for nine consecutive times, the connection is marked as
  broken.

Bu 3 dosyayı sadece kullanarak değiştirebilir echove donmuş bir SSH oturumunun bu değerlere göre bağlantısının kesildiğini görebilirsiniz.


6
Ben ssh sadece kaçış karakterini başlangıçta veya bir Enter sonra tanıdığını eklemek istiyorum. Bir ssh bağlantısı takıldığında, Enter genellikle her zaman değil, daha önce bastığınız son karakterdir. Bu nedenle Enter ~ ., bağlantıyı sonlandıran sıraya alışmak muhtemelen daha iyidir .
egmont

Teşekkürler. /proc/sys/net/ipv4/tcp_keepalive*Dosyaların nasıl ve ClientAliveIntervalve ServerAliveInterval birlikte çalıştığından hala emin değilim ? Hepsi aynı ayarlar için mi, yani ssh bağlantısını canlı tutmak için mi? Eski dosyalar sadece ssh bağlantıları için değil, diğer TCP bağlantıları için mi?
Herkes

Başka bir soru: neden "Bu zaman aşımları oldukça yüksekse donmuş bir kabuk yaşayacaksınız." Ne demek "molalar oldukça yüksek"? Belirtilen süre boyunca aktivite eksikliği durumunda kabuk her zaman donmaz mı? ya da bazı etkinlik eksikliği durumlarında, kabuk donmuş değil, otomatik olarak çıkar mı demek istiyorsun?
Herkes

@Tim: 1. /proc/sys/net/ipv4/tcp_keepalive*sadece için ssh(d)değil, bağlantı verdiğim belgede de belirtildiği gibi:Remember that keepalive support, even if configured in the kernel, is not the default behavior in Linux. Programs must request keepalive control for their sockets using the setsockopt interface. There are relatively few programs implementing keepalive, but you can easily add keepalive support for most of them following the instructions explained later in this document.
Arkadiusz Drabczyk

@Zaman: 2. Oldukça yüksek, örneğin 2 saat anlamına gelir - oturumun bağlantısı kesilmeden önce 2 saat beklemeniz gerekir. Bir test yapın - uzak bir ana bilgisayara bağlanın, uzaktan kumandayı öldürün sshdveya kabloyu çıkarın ve dondurulmuş bir ssh oturumun ne zaman kendiliğinden çıkacağını kontrol edin . By frozen shellaktif değildir Acımasız kabuk, herhangi anahtarları almaz ve hiçbir şey yazmıyor.
Arkadiusz Drabczyk
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.