Apa yang bisa saya lakukan ketika sesi SSH saya macet?

109

Terkadang sesi ssh saya di terminal hang. Bagaimana saya bisa keluar dari sesi ssh dan menghubungkan kembali?

Kit Sunde
sumber

Jawaban:

196

Ketik ~.(mis. Gelombang, titik) di awal baris. Dengan kata lain, tekan Enter, lalu ~, lalu .. (Dalam beberapa bahasa, Anda mungkin perlu menekan Shiftatau Altuntuk memasukkan ~karakter.)

Secara umum, ~karakter adalah karakter pelarian dalam sesi SSH ketika Anda mengetiknya di awal baris. Ketik Enterkemudian ~?untuk melihat daftar perintah pelarian. Yang paling umum adalah

  • ~. untuk mengakhiri koneksi
  • ~^Z(tekan ~kemudian Ctrl+ Z) untuk menangguhkan koneksi dan ketik perintah lokal (jalankan perintah fguntuk kembali ke sesi SSH)

Jika Anda menginginkan tilde di awal baris, tekan ~dua kali.

Gilles
sumber
7

Yang perlu Anda lakukan untuk keluar dari sesi ssh adalah mengetikkan exitprompt.

Coba masukkan Shift+ `+.

daviesgeek
sumber
2
Itu tidak menerima input pengguna lagi, itu benar-benar macet. Di Ubuntu ada kombinasi keyboard yang mengakhiri sesi yang dapat Anda gunakan dalam kasus-kasus seperti ini. Setelah beberapa saat sesi akan berakhir dengan menyatakan broken-pipetetapi saya lebih suka tidak menunggu.
Kit Sunde
1
@ Biarkan saya memperbaiki jawaban saya. Maaf soal itu. Saya tidak menyadari bahwa Anda bermaksud sesi SSH yang benar-benar macet.
daviesgeek
Saya biasanya hanya menunggu sampai habis. Terlepas dari kenyataan bahwa saya tahu tentang perintah-perintah ini, saya selalu lupa bahwa saya dapat menggunakannya untuk mempercepat proses mendapatkan shell saya kembali. Catatan @Gilles juga menjawab, Anda mungkin harus menekan Enter / Return satu kali sebelum ~. Anda dapat mempelajari lebih lanjut di manual SSH (sedikit lebih dari setengahnya), dan dengan mengetik: ~?ke dalam sesi SSH yang aktif / terhubung, sekali lagi, Anda mungkin harus untuk menekan enter sekali sebelumnya.
Jason Salaz
7

Jika sesi Anda digantung dan prompt tidak lagi responsif, Anda bisa langsung mematikan instance Terminal dan semua proses anak yang terkait dengan instance itu, yang sesi ssh Anda satu, harus di-axed dengannya.

Jika Anda benar-benar ingin teliti meskipun Anda dapat membuka instance Terminal baru, cari sesi ssh di daftar proses, dan bunuh mereka melalui baris perintah:

> ps -ef  |grep ssh
501  1332   142   0 20Dec11 ??         0:01.33 /usr/bin/ssh-agent -l
501 57172 57150   0  1:58pm ttys000    0:00.01 grep ssh
501 57139 57133   0  1:57pm ttys002    0:00.03 ssh -i/Users/ian/code/ec2-keys/id_rsa-gsg-keypair [email protected]

> kill 57139

Jika tidak berhasil coba:

> kill -9 57139

Jangan bunuh ssh-agentprosesnya.

Atau Anda dapat membuka Activity Monitor dan mencari di sana untuk sesi dan menekan tombol kill untuk mereka:

Pemfilteran Monitor Aktivitas untuk sesi ssh

Ian C.
sumber
+1, inilah yang saya lakukan. Seringkali di mana saya membiarkan sesi berjalan, dan koneksi rusak secara tidak sengaja atau saya tidur di laptop, ini menyebabkan ssh membeku. Saya membuka tab konsol baru dan membunuh PID dari proses ssh (atau menutup tab ssh dan membuka yang baru)
halfer
Apakah menggunakan cara pintas keyboard berfungsi pada Mac Anda tanpa harus menghabiskan prosesnya dengan membosankan?
Rafael Bugajewski
1
Gunakan ~.. Lihat di atas.
Snowcrash
0

~. berfungsi, meskipun sepertinya macet total, menghentikan koneksi ssh dan Anda dapat memulainya lagi, tetapi di keyboard saya harus menekan Alt + ~ lalu spasi lalu.

Hannu
sumber