- Saat sesi SSH macet, Anda bisa mengendalikan berbagai hal lewat menu escape sequence bawaan SSH tanpa perlu memaksa proses berhenti
- Di dalam sesi, tekan
↵Enter lalu masukkan ~? untuk menampilkan daftar perintah tersembunyi, dan gunakan ~. untuk langsung memutus koneksi dalam situasi apa pun
- Escape sequence ini tertanam di klien SSH itu sendiri, sehingga tetap berfungsi meski server tidak merespons atau koneksi terputus
- Dalam sesi SSH bertingkat, Anda bisa memakai
~~ untuk meneruskan sequence ke klien di lapisan dalam
- Selain itu, diperkenalkan juga beberapa opsi SSH yang berguna seperti
-C, -v, dan -D
Menu escape sequence SSH
- Di dalam sesi SSH, tekan
↵Enter lalu masukkan ~? untuk melihat daftar escape sequence yang didukung
- Daftar sequence utama:
~. — putuskan koneksi (termasuk sesi yang dimultipleks)
~B — kirim sinyal BREAK ke sistem jarak jauh
~C — buka command line (bisa mengatur port forwarding, ketik help untuk panduan)
~R — minta rekey
~V/v — naikkan/turunkan verbosity (LogLevel)
~^Z — suspend SSH
~# — tampilkan daftar koneksi yang diteruskan
~& — pindahkan SSH ke background (saat menunggu koneksi ditutup)
~~ — kirim karakter escape itu sendiri (masukkan dua kali)
- Sequence ini tertanam di klien SSH itu sendiri, jadi tetap bekerja walaupun server SSH tidak merespons atau koneksi sedang terputus
- Yang paling berguna adalah
~., karena bisa langsung mengakhiri sesi dalam kondisi apa pun saat sesi macet
- Escape sequence ini hanya dikenali tepat setelah baris baru (newline)
Penggunaan dalam sesi SSH bertingkat
- Dalam lingkungan bertingkat saat Anda melakukan SSH lagi dari dalam sesi SSH, gunakan
~~ untuk meneruskan sequence ke klien di lapisan dalam
- Contoh:
pinkie@stable:~$ ssh ponyville # stable
pinkie@ponyville:~$ ssh manehatten # stable › ponyville
pinkie@manehatten: ~$ # stable › ponyville › manehatten
pinkie@manehatten:~$ Connection to manehatten closed. # ↵Enter `~~.`
pinkie@ponyville:~$ # stable › ponyville
pinkie@ponyville:~$ ssh manehatten stable › ponyville
pinkie@manehatten: ~$ # stable › ponyville › manehatten
pinkie@manehatten:~$ Connection to ponyville closed. # ↵Enter `~.`
pinkie@stable:~$ # stable
- Saat terhubung sebagai
stable → ponyville → manehatten
- Memasukkan
~~. hanya akan menutup sesi paling dalam (manehatten) dan kembali ke ponyville
- Memasukkan
~. akan menutup sampai sesi tengah (ponyville) dan kembali ke stable
Opsi SSH bonus
ssh -C — aktifkan kompresi gzip; dokumentasi menyebut ini tidak perlu di jaringan cepat, tetapi saat memakai TUI atau menampilkan log dalam jumlah besar, ini sangat membantu meningkatkan latensi dan responsivitas
ssh -v — aktifkan logging terperinci (-vv, -vvv untuk menampilkan lebih banyak informasi); berguna untuk membedakan apakah koneksi benar-benar macet atau hanya lambat saat terhubung ke perangkat lambat seperti Raspberry Pi
ssh -D 1234 — buat proxy SOCKS di localhost:1234, sehingga Anda bisa mengakses lewat jaringan server untuk pekerjaan di LAN sisi server atau sebagai VPN DIY sederhana
5 komentar
Wah, ini benar-benar fitur yang baru pertama kali saya lihat; sekarang sepertinya saya tidak perlu menutup terminal lagi.
Wah.. setelah belasan tahun memakai SSH, ini pertama kalinya saya melihat fitur ini.
Ternyata benar-benar muncul menu.
Hentikan perangkatnya
Eh......
Opini Hacker News
Saya tadinya ingin membela manpage habis-habisan. Kebanyakan manpage open source kualitasnya tinggi, dan beberapa benar-benar luar biasa
Tapi alat
manitu sendiri punya masalah. Misalnya saya mencoba mencari sintaks escape seperti~?pada klien openssh, tetapi tidak bisa ditemukan di manpageAlasannya, man mengubah karakter
~menjadi tilde Unicode aneh sehingga tidak bisa di-grep. Karakter-juga diubah dengan cara yang sama sehingga tidak bisa dicariIni fatal untuk dokumentasi alat baris perintah. Fitur konversi seperti ini seharusnya nonaktif secara bawaan
ctrl-runtuk pencarian literal (/<ctrl-r>~?)less, pager bawaan Debian, ini berfungsi dengan baikman -E ascii. Lingkungan saya Cygwin 3.6.6, jadi mungkin ada perbedaan distribusineovimsebagai pager, pencarian~?berjalan baik. Hanya saja Anda perlu tahu escape regex (\\~?)\\~\\?juga berfungsiSaya sudah lama memakai pintasan
~., tetapi tidak tahu soal menu bantuanJika mengetik
~dua kali, Anda bisa mengirim karakter tilde sungguhan, dan pada sesi biasa itu tidak dianggap escape kecuali dimasukkan sebagai karakter pertamaArtinya,
~hanya bekerja sebagai escape saat menjadi karakter pertama di baris dan tepat setelah baris baru. Desain UI-nya cukup matangJadi output seperti
ls ~/^?^?^?^?^?~/a.outbisa muncul. SSH memantau aliran input, bukan layar~.Anda harus menekan Enter terlebih dahulu, dan ini bisa saja terkirim ke serverSaya sudah memakai SSH lebih dari 15 tahun, tetapi baru pertama kali tahu soal urutan escape seperti ini
Lain kali kalau sesi macet, saya pasti akan mencoba
~.. Jauh lebih baik daripada menutup terminalIni bisa diatasi dengan VPN atau Tailscale, atau dengan menyesuaikan parameter
tcp_keepaliveagar koneksi tetap hidupContoh konfigurasi: Dengan begitu sesi tetap bertahan bahkan di lingkungan CGNAT
~.setiap minggu selama 20 tahun. Menjalankan SSH dengan opsi-vjuga berguna untuk debugging masalah koneksi~~.~., Anda harus menekan Enter agar mulai dari baris baruSaya juga sudah lama memakai
~., tetapi tidak tahu escape lainnya. Di prompt shell itu tidak langsung bekerja, jadi Anda harus menjalankancatlalu mengetik~?<enter>~.~., tetapi tidak tahu bahwa~hanya bekerja di baris baru.~^Zjuga tampak bergunaJadi teringat urutan telnet ctrl-[ dulu
Enterhanya berfungsi untuk menyiapkan escape baruFitur-fitur ini sebenarnya berasal dari rsh. Saya cukup tua untuk mengingatnya
~lebih dulu muncul di cu(1). Itu bahkan sebelum rsh, pada era 4.1BSDscpseperti rcp, Anda harus menambahkan opsi-OMenu SSH ini berguna saat tunneling. Memang sekarang sering tergantikan oleh hal seperti Tailscale, tetapi tetap bermanfaat
Beberapa sesi SSH bisa di-multiplex menjadi satu sehingga tidak perlu autentikasi berulang, dan pelengkapan tab juga lebih cepat
Hanya saja, saat koneksi macet, memang sedikit merepotkan
Ini bukan terlalu “rahasia”, lebih karena kebanyakan orang tidak membaca manpage sampai akhir jadi tidak mengetahuinya
Escape
~juga dipakai di UNIX cu pada 1970-an. SSH bisa dianggap keturunannyaPengaturan ControlMaster bawaan kurang nyaman, jadi sebaiknya tambahkan blok konfigurasi seperti ini
Dengan ini, SSH/scp/rsync ke host yang sama akan menggunakan ulang koneksi yang sudah ada
Anda juga bisa menambahkan port forwarding di tengah sesi dengan escape
~CControlPersistdinaikkan ke sekitar 1 jam, koneksi akan tetap hidup meski jeda login singkatSaya juga hanya bisa memulihkan sesi SSH yang macet dengan
[Enter] ~.Ini terasa seperti fitur tersembunyi yang tidak banyak diketahui kecuali oleh pengguna Linux berpengalaman
Saya memang sudah tahu, tetapi hampir tidak pernah ada kesempatan untuk menggunakannya. (...)