Saya menemukan solusinya di sini: http://www.g-loaded.eu/2006/11/24/auto-closing-ssh-tunnels/
Cara terbaik - Terowongan yang ditutup secara otomatis
Seperti yang telah disebutkan sebelumnya, alih-alih menggunakan kombinasi switch -f -N, kita bisa menggunakan -f saja, tetapi juga menjalankan perintah pada mesin jarak jauh. Tapi, perintah mana yang harus dijalankan, karena kita hanya perlu menginisialisasi terowongan?
Ini adalah saat tidur dapat menjadi perintah yang paling berguna dari semua! Dalam situasi khusus ini, tidur memiliki dua keuntungan:
- tidak melakukan apa-apa, jadi tidak ada sumber daya yang dikonsumsi
- pengguna dapat menentukan berapa lama akan dieksekusi
Bagaimana ini membantu dalam menutup terowongan ssh secara otomatis dijelaskan di bawah ini.
Kami memulai sesi ssh di latar belakang, sambil mengeksekusi perintah sleep selama 10 detik pada mesin jarak jauh. Jumlah detik tidak terlalu penting. Pada saat yang sama, kami menjalankan vncviewer persis seperti sebelumnya:
[me@local]$ ssh -f -L 25901:127.0.0.1:5901 me@remote.example.org sleep 10; \
vncviewer 127.0.0.1:25901:1
Dalam hal ini, klien ssh diinstruksikan untuk memotong sesi ssh ke latar belakang (-f), membuat terowongan (-L 25901: 127.0.0.1: 5901) dan menjalankan perintah sleep pada server jarak jauh selama 10 detik (sleep 10).
Perbedaan antara metode ini dan yang sebelumnya (-N switch), pada dasarnya, adalah bahwa dalam hal ini tujuan utama ssh klien bukan untuk membuat terowongan, melainkan untuk menjalankan perintah sleep selama 10 detik. Penciptaan terowongan adalah semacam efek samping, tujuan sekunder. Jika vncviewer tidak digunakan, klien ssh akan keluar setelah periode 10 detik, karena tidak ada lagi pekerjaan yang harus dilakukan, menghancurkan terowongan pada saat yang sama.
Selama pelaksanaan perintah tidur, jika proses lain, vncviewer dalam kasus ini, mulai menggunakan terowongan itu dan menjaganya tetap di luar periode 10 detik, kemudian, bahkan jika klien ssh menyelesaikan pekerjaan jarak jauhnya (pelaksanaan tidur), ia tidak bisa keluar karena proses lain menempati terowongan. Dengan kata lain, klien ssh tidak dapat menghancurkan terowongan karena harus membunuh vncviewer juga. Ketika vncviewer berhenti menggunakan terowongan, maka klien ssh juga keluar, karena ia telah mencapai tujuannya.
Dengan cara ini, tidak ada proses ssh dibiarkan berjalan di latar belakang.
/tmp/session1
(meskipun disarankan untuk menamainya menggunakan % pola - lihat deskripsi ControlPath diman ssh_config
)