Kilitlendiğinde ssh'den nasıl ayrılabilirim?


380

Sık sık okula evimdeki kutuma girerim, ancak genellikle dersleri değiştirdiğimde ve bilgisayarım askıya alındığında, boru kırılır. Bununla birlikte, ssh kilitlenir - Ctrl+ c, Ctrl+ zve Ctrl+ dhiçbir etkisi olmaz.

Terminalimi yeniden başlatmak zorunda kalmak can sıkıcı ve yeni bir ekran penceresini kapatıp yeniden oluşturmak zorunda kalmak daha da can sıkıcı.

Öyleyse sorum, ssh'ın düzgün bir şekilde ölmesini sağlamanın kolay bir yolu var mı (yani, boru "normalde" başarısız olduğunda, kırık bir boru hakkında bir mesajla çıkacaktır)? Yoksa PID'nin ne olduğunu bulup, el ile öldürmek zorunda mıyım?


Aktif bir SSH oturumu ile bağlantım kesilirse donar. Sadece onu öldürüp yeni bir oturum başlatıyorum. GNU ekranını kullandığım için hiçbir bilgi kaybedilmedi.
Lekensteyn

Ben de - ekran en iyisidir. Ama yine de yapmak için can sıkıcı screen -x: P
Wayne Werner 12:11

[mosh] (mosh.mit.edu) bu sorunu önlemek için temiz bir alternatiftir. Aralıklı internet bağlantısıyla bile "bağlı kalır".
jaynp

@jaynp mosh kullanmamın sakıncası (iki dakika önce beri) bunun nasıl kesileceğini bilmememdir. Uzaktaki bir ana bilgisayarda tmux + irssi oturumu kullanıyorum (bir IRC fedai olarak), ve bazen kesmek istiyorum (tmux + irssi çalışırken) ve <enter> + ~ + ile yaptım. SSH kullanarak ancak mosh kullanarak çalışmaz.
Pavel Šimerda,

Yanıtlar:


534

Normal tuşlar sshoturum boyunca iletilir , bu nedenle hiçbiri işe yaramaz. Bunun yerine, kaçış dizilerini kullanın. Geçerli oturumu sonradan hit öldürmek Enter ↵, ~, ..

Bu kaçış dizilerinin fazla ile listelenebilir Enter ↵, ~, ?:

Supported escape sequences:
  ~.  - terminate session
  ~B  - send a BREAK to the remote system
  ~R  - Request rekey (SSH protocol 2 only)
  ~#  - list forwarded connections
  ~?  - this message
  ~~  - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)

Escape dizileri listesini vurarak kapatabilirsiniz enter.

Vurmak, onu yakalamak yerine göndermeye ~~neden ssholduğundan ~, N iç içe sshbağlantılarını ~ N kere vurarak adresleyebileceğinizi unutmayın . (Bu sadece ~doğrudan takip edenler için geçerlidir enter.) Bu, 5 kat derinliğinde enter~~~~~.bir sshoturumu sonlandırdığını ve diğer 4'ü bozulmadan tuttuğunu söyler .


48
Klavye düzenleri için ~bir olan ölü anahtar , anahtar dizisidir Enter ~ Space ..
Søren Løvborg

1
Ben ettik eklenen daha kullanışlı olabilecek kaçış dizilerinin. :)
gertvdijk

5
Eğer satırın başındaki gerektiğini unutmayın EscapeChar ~içinde /etc/ssh/ssh_config(veya ~/.ssh/ssh_configisterseniz).
Aditya MP,

6
@Hitechcomputergeek Enter ~ ~ .yana ~ ~bir hazır gönderir ~SSH oturumu, ikinci SSH oturumu tek tilde olarak alır ve yorumlayacaktır .kaçış parçası olarak kullanılabilir. Beşinci iç içe ssh oturumuna göndermek için, kaçış sıranızda 5 tild kullanın.
Score_Under

4
hayat değiştirerek;)
artm

54

Bağlantı sorunları nedeniyle donmasını önlemek için SSH için uygulama düzeyinde canlı tutma ayarları da isteyebilirsiniz . Benim şunu içeriyor:~/.ssh/config

Host *
ServerAliveInterval 15
# ServerAliveCountMax 3

Bu, ssh istemcisinin her 15 saniyede bir uygulama düzeyinde saklama canlıları göndermesini sağlar. Üçü arka arkaya başarısız olduğunda (varsayılan ServerAliveCountMax), müşteri bağlantıyı asılı olarak görür ve kapatır.

Diğer seçeneğin TCPKeepAliveaksine, bu şifreli kanalda kontrol edilir ve taklit edilemez.


Bu canlıların aynı zamanda uzun süredir rölanti bağlantılarını canlı tutmaya yardımcı olduğu , yani saatlerce dokunulmadan yarım kapalı tcp oturumları açmanızı önlediğine dikkat çekiliyor .

Düzenli olarak çalıştırıyorsanız, bu özelliği açmanızı şiddetle tavsiye ederim, ancak bunun neden olabileceği hafif güvenlik riskini de bilmelisiniz. Bir bilinen-şifresiz metin saldırısı saldırganın aralığını bilir ve boş bağlantının içerikleri ise daha kolay hale gelebilir. Varsayılan olarak neden etkinleştirilmediğinin nedeni bu olabilir.


3
Güvenlik sebepleri İçki içebilir ve ssh sessio'yu açabilir ve son 20 yıl boyunca birlikte çalıştığınız laboratuvar ortağınız, oturumunuzu 10 dakikalık aradan sonra içerken sunucuyu kaçırmak ve yok etmek için kullanabilir.
Luis Alvarado

2
@CYREX, ha? Ve varsayılan seçenek olarak nasıl kapatılabilir, haksız laboratuar ortakları olmanızı nasıl önleyebilirim? %)
ulidtko

1
@ ulidtko: ServerAliveIntervalKayıp bir bağlantının hemen algılanması için 1 ayarının yapılmaması için herhangi bir sebep var mı ?
krlmlr

2
@gertvdijk: Teşekkürler. Benim için, hatta olmadan çalışır Host. Ayrıca, "Gelişmiş Şifreleme Standardı gibi modern şifreler şu anda bilinen düz metin saldırılarına duyarlı değildir." (eklediğiniz bağlantıdan) ...
krlmlr

2
SSH'yi Mosh (mobil kabuk) ile de değiştirebilirsiniz. Mosh sunucuya SSH ile bağlanıyor, ancak daha sonra bağlantı sorunlarına karşı dirençli olan UDP tabanlı bir kanal kuruyor. Mosh'da ayrıca yerel bir yankı var, bu yüzden sunucu cevap vermiyor olsa bile ne yazdığınızı görebilirsiniz. Tuş vuruşları yapıldığında, Mosh yankılan metni işaretler. mosh.mit.edu
Pascal Rosin

41

Geekosaur'un cevabında belirtildiği gibi, kaçış dizisi ~.bağlantıyı sonlandırır.

Kaçış dizilerinin tam listesi ve ne yaptıkları yazılarak görüntülenebilir ~?:

Supported escape sequences:
  ~.  - terminate connection (and any multiplexed sessions)
  ~B  - send a BREAK to the remote system
  ~C  - open a command line
  ~R  - Request rekey (SSH protocol 2 only)
  ~^Z - suspend ssh
  ~#  - list forwarded connections
  ~&  - background ssh (when waiting for connections to terminate)
  ~?  - this message
  ~~  - send the escape character by typing it twice
(Note that escapes are only recognized immediately after newline.)

Kaçış dizileri listesini nasıl kapatırım?
kristianp

3
Kaçış dizisi listesini yazdırdıktan sonra bir sonrakini kabul etmeye hazır değildir.
Tejas Kale
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.