Bagaimana saya bisa keluar dari ssh ketika terkunci?

380

Saya sering ssh ke kotak saya di rumah dari sekolah, tetapi biasanya ketika saya mengubah kelas dan komputer saya ditangguhkan, pipa akan rusak. Namun, ssh hanya mengunci - Ctrl+ c, Ctrl+ zdan Ctrl+ dtidak berpengaruh.

Menjengkelkan karena harus me-restart terminal saya, dan bahkan lebih menjengkelkan harus menutup dan membuat kembali jendela layar baru.

Jadi pertanyaan saya, apakah ada cara mudah untuk membuat ssh mati dengan benar (yaitu ketika pipa gagal "normal" itu akan keluar dengan pesan tentang pipa yang rusak)? Atau apakah saya harus mencari tahu apa PID itu dan membunuhnya secara manual?

Wayne Werner
sumber
Jika saya terputus dengan sesi SSH aktif, itu membeku. Saya baru saja membunuhnya dan memulai sesi baru. Tidak ada informasi yang hilang karena saya menggunakan layar GNU.
Lekensteyn
Saya juga - layar adalah yang terbaik. Tapi tetap saja menyebalkan harus screen -x: P
Wayne Werner
[mosh] (mosh.mit.edu) adalah alternatif yang rapi untuk menghindari masalah ini. Itu "tetap terhubung" bahkan dengan konektivitas internet terputus-putus.
jaynp
@ jaynp Kelemahan saya menggunakan mosh (sejak dua menit yang lalu) adalah bahwa saya tidak tahu cara melepaskannya. Saya menggunakan sesi tmux + irssi pada host jarak jauh (sebagai bouncer IRC, semacam) dan saya ingin memutus koneksi kadang-kadang (sambil menjaga tmux + irssi tetap berjalan) dan saya lakukan dengan <enter> + ~ +. menggunakan SSH tetapi tidak akan berfungsi menggunakan mosh.
Pavel Šimerda

Jawaban:

534

Kunci normal diteruskan selama sshsesi, sehingga tidak ada yang berfungsi. Sebagai gantinya, gunakan urutan pelarian. Untuk membunuh sesi saat hit selanjutnya Enter ↵, ~, ..

Lebih dari escape sequence ini dapat terdaftar dengan 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.)

Anda dapat menutup daftar urutan Escape dengan menekan enter.

Perhatikan bahwa karena menekan ~~penyebab sshmengirim ~alih - alih mencegatnya, Anda dapat mengatasi koneksi N bersarang sshdengan menekan ~ N kali. (Ini hanya berlaku untuk ~s yang langsung mengikuti enter.) Artinya, enter~~~~~.mengakhiri sshsesi 5 lapisan dalam dan menjaga 4 lainnya tetap utuh.

geekosaurus
sumber
48
Untuk layout keyboard mana ~adalah kunci mati , urutan kunci Enter ~ Space ..
Søren Løvborg
1
Saya telah menambahkan lebih banyak urutan pelarian yang mungkin berguna. :)
gertvdijk
5
Perhatikan bahwa Anda perlu tanda komentar pada baris EscapeChar ~di /etc/ssh/ssh_config(atau ~/.ssh/ssh_configjika Anda suka).
Aditya MP
6
@Hitechcomputergeek Enter ~ ~ .Sejak ~ ~mengirim literal ~melalui sesi SSH Anda, sesi SSH kedua akan menerimanya sebagai tilde tunggal dan akan menafsirkannya .sebagai bagian dari pelarian. Untuk mengirim ke sesi ssh bersarang ke-5, cukup gunakan 5 tilde dalam urutan pelarian Anda.
Score_Under
4
mengubah hidup;)
artm
54

Anda juga mungkin ingin aplikasi-tingkat pengaturan terus-alives untuk SSH untuk mencegah dari pembekuan pada masalah koneksi. Saya ~/.ssh/configmengandung ini:

Host *
ServerAliveInterval 15
# ServerAliveCountMax 3

Ini membuat ssh client mengirim tingkat aplikasi tetap hidup setiap 15 detik. Setiap kali mereka bertiga gagal secara berurutan (default ServerAliveCountMax), klien menganggap koneksi sebagai hang dan menutupnya.

Menentang opsi lain TCPKeepAlive, ini diperiksa di dalam saluran terenkripsi dan tidak palsu.


Perlu dicatat bahwa para keep-alive itu juga membantu, uhm, menjaga koneksi yang lama tidak bekerja , yaitu mencegah Anda dari sesi tcp setengah tertutup yang menggantung selama berjam-jam tanpa disentuh.

Saya sangat merekomendasikan untuk mengaktifkan fitur ini jika Anda mengalami ini secara teratur, tetapi Anda juga harus tahu tentang sedikit risiko keamanan yang mungkin ditimbulkan. Serangan dikenal-plaintext mungkin menjadi lebih mudah jika penyerang tahu interval dan isi koneksi siaga. Ini mungkin alasan mengapa tidak diaktifkan secara default.

ulidtko
sumber
3
Alasan keamanan. Anda bisa minum dan meninggalkan ssh sessio terbuka dan rekan lab Anda yang telah bekerja dengan Anda dalam 20 tahun terakhir mungkin menggunakan sesi Anda untuk membajak server dan menghancurkannya ... saat Anda minum di istirahat 10 menit Anda.
Luis Alvarado
2
@CYREX, eh? Dan bagaimana bisa dimatikan dengan opsi default mencegah Anda memiliki mitra lab yang tidak adil? %)
ulidtko
1
@ulidtko: Apakah ada alasan untuk tidak mengatur ServerAliveIntervalke 1 sehingga koneksi yang hilang segera terdeteksi?
krlmlr
2
@ gertvdijk: Terima kasih. Bagi saya, itu bekerja bahkan tanpa Hostgaris. Juga, "sandi modern seperti Advanced Encryption Standard saat ini tidak rentan terhadap serangan plaintext yang dikenal." (dari tautan yang Anda tambahkan) ...
krlmlr
2
Anda juga dapat mengganti SSH dengan Mosh (shell ponsel). Mosh terhubung ke server melalui SSH, tetapi kemudian membuat saluran berbasis UDP yang tahan terhadap masalah koneksi. Mosh juga memiliki gema lokal, sehingga Anda dapat melihat apa yang Anda ketikkan, bahkan jika server tidak menjawab. Ketika penekanan tombol disampaikan, Mosh menandai teks yang digaungkan. mosh.mit.edu
Pascal Rosin
41

Seperti dicatat dalam jawaban geekosaur, urutan pelarian ~.akan mengakhiri koneksi.

Daftar lengkap urutan pelarian dan apa yang dilakukan dapat ditampilkan dengan mengetik ~?:

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.)
scottl
sumber
Bagaimana cara menutup daftar urutan pelarian?
kristianp
3
Anda tidak, setelah mencetak daftar urutan keluar, siap untuk menerima yang berikutnya.
Tejas Kale