54 poin oleh GN⁺ 2026-03-13 | 5 komentar | Bagikan ke WhatsApp
  • 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)
    • ~^Zsuspend 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

 
t7vonn 2026-03-13

Wah, ini benar-benar fitur yang baru pertama kali saya lihat; sekarang sepertinya saya tidak perlu menutup terminal lagi.

 
xguru 2026-03-13

Wah.. setelah belasan tahun memakai SSH, ini pertama kalinya saya melihat fitur ini.
Ternyata benar-benar muncul menu.

 
bus710 2026-03-13

Hentikan perangkatnya
Eh......

 
GN⁺ 2026-03-13
Opini Hacker News
  • Saya tadinya ingin membela manpage habis-habisan. Kebanyakan manpage open source kualitasnya tinggi, dan beberapa benar-benar luar biasa
    Tapi alat man itu sendiri punya masalah. Misalnya saya mencoba mencari sintaks escape seperti ~? pada klien openssh, tetapi tidak bisa ditemukan di manpage
    Alasannya, man mengubah karakter ~ menjadi tilde Unicode aneh sehingga tidak bisa di-grep. Karakter - juga diubah dengan cara yang sama sehingga tidak bisa dicari
    Ini fatal untuk dokumentasi alat baris perintah. Fitur konversi seperti ini seharusnya nonaktif secara bawaan

    • Saya tidak tahu soal masalah konversi karakter, tetapi Anda bisa menekan ctrl-r untuk pencarian literal (/<ctrl-r>~?)
    • Di less, pager bawaan Debian, ini berfungsi dengan baik
    • Saya menyelesaikannya dengan opsi man -E ascii. Lingkungan saya Cygwin 3.6.6, jadi mungkin ada perbedaan distribusi
    • Jika memakai neovim sebagai pager, pencarian ~? berjalan baik. Hanya saja Anda perlu tahu escape regex (\\~?)
    • Di macOS dan CentOS, pencarian \\~\\? juga berfungsi
  • Saya sudah lama memakai pintasan ~., tetapi tidak tahu soal menu bantuan
    Jika mengetik ~ dua kali, Anda bisa mengirim karakter tilde sungguhan, dan pada sesi biasa itu tidak dianggap escape kecuali dimasukkan sebagai karakter pertama
    Artinya, ~ hanya bekerja sebagai escape saat menjadi karakter pertama di baris dan tepat setelah baris baru. Desain UI-nya cukup matang

    • Untuk pembaca yang lebih muda, dalam mode echo terminal, backspace sebenarnya tidak menghapus buffer input yang sesungguhnya
      Jadi output seperti ls ~/^?^?^?^?^?~/a.out bisa muncul. SSH memantau aliran input, bukan layar
    • Kekurangannya, saat sesi macet, untuk keluar dengan ~. Anda harus menekan Enter terlebih dahulu, dan ini bisa saja terkirim ke server
  • Saya 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 terminal

    • Jika koneksi SSH sering putus, penyebabnya bisa jadi timeout TCP pendek pada CGNAT
      Ini bisa diatasi dengan VPN atau Tailscale, atau dengan menyesuaikan parameter tcp_keepalive agar koneksi tetap hidup
      Contoh konfigurasi:
      net.ipv4.tcp_keepalive_time=240
      net.ipv4.tcp_keepalive_intvl=60
      net.ipv4.tcp_keepalive_probes=120
      
      Dengan begitu sesi tetap bertahan bahkan di lingkungan CGNAT
    • Saya sudah memakai ~. setiap minggu selama 20 tahun. Menjalankan SSH dengan opsi -v juga berguna untuk debugging masalah koneksi
    • Saat SSH dirangkai beberapa tahap, Anda bisa menutup hop kedua dengan ~~.
    • Saya juga sudah memakainya hampir 30 tahun, dan sebelumnya memakai rsh. Lihat Berkeley r-commands
    • Sebelum mengetik ~., Anda harus menekan Enter agar mulai dari baris baru
  • Saya juga sudah lama memakai ~., tetapi tidak tahu escape lainnya. Di prompt shell itu tidak langsung bekerja, jadi Anda harus menjalankan cat lalu mengetik ~?

    • Tetap berfungsi. OpenSSH memantau input saja, bukan output, jadi Anda bisa keluar dengan <enter>~.
    • Saya juga selalu memutus sesi dengan ~., tetapi tidak tahu bahwa ~ hanya bekerja di baris baru. ~^Z juga tampak berguna
      Jadi teringat urutan telnet ctrl-[ dulu
    • Klien SSH mengenali escape tanpa perlu tahu mode sesi jarak jauh. Enter hanya berfungsi untuk menyiapkan escape baru
  • Fitur-fitur ini sebenarnya berasal dari rsh. Saya cukup tua untuk mengingatnya

    • Sebenarnya gaya perintah ~ lebih dulu muncul di cu(1). Itu bahkan sebelum rsh, pada era 4.1BSD
    • Sekarang, kalau ingin memakai scp seperti rcp, Anda harus menambahkan opsi -O
    • Sebagai orang yang masih ingat era uucp!bangpath, saya cuma bisa tertawa
  • Menu SSH ini berguna saat tunneling. Memang sekarang sering tergantikan oleh hal seperti Tailscale, tetapi tetap bermanfaat

    • Saat membuka “koneksi baru” di tab baru, saya memakai fitur ControlMaster
      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
    • Saya sering memakai tuns.sh. Praktis karena bisa mengekspos localhost ke luar
  • 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 keturunannya

  • Pengaturan ControlMaster bawaan kurang nyaman, jadi sebaiknya tambahkan blok konfigurasi seperti ini

    Host *
      ControlMaster auto
      ControlPath ~/.ssh/sockets/%r@%h:%p
      ControlPersist 10m
    

    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 ~C

    • Jika ControlPersist dinaikkan ke sekitar 1 jam, koneksi akan tetap hidup meski jeda login singkat
    • Ada juga gurauan bahwa komentar ini terasa seperti ditulis LLM
  • Saya juga hanya bisa memulihkan sesi SSH yang macet dengan [Enter] ~.
    Ini terasa seperti fitur tersembunyi yang tidak banyak diketahui kecuali oleh pengguna Linux berpengalaman

 
kayws426 2026-03-13

Saya memang sudah tahu, tetapi hampir tidak pernah ada kesempatan untuk menggunakannya. (...)