Saya sangat bingung dengan hal ini. Dari halaman manual:
-f Requests ssh to go to background just before command execution.
Setelah memulai SSH dengan -f
opsi, saya memiliki terowongan yang berfungsi. Tetapi setelah saya selesai menggunakannya saya tidak tahu bagaimana berinteraksi lebih jauh dengannya. Misalnya, saya tidak bisa menutup terowongan SSH ketika saya selesai dengan itu.
Metode biasa yang saya tahu tidak berfungsi. Misalnya, jobs
tidak mengembalikan apa pun. The ~
perintah tidak diakui (dan saya tidak tahu persis bagaimana menggunakannya, anyway).
Namun, pgrep
beri tahu saya bahwa terowongan SSH masih berjalan (setelah saya menutup terminal, dll.). Bagaimana saya berinteraksi dengannya? Bagaimana saya menutupnya?
sumber
/tmp/session1
(meskipun disarankan untuk menamainya menggunakan % pola - lihat deskripsi ControlPath diman ssh_config
)ssh -S <path-to-socket> -O exit <server>
perintah dapat berupa string apa pun, tetapi harus ada. Itu agak canggung.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:
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:
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.
sumber
vncviewer 127.0.0.1::25091
karena Anda menggunakan sintaks port dan bukan sintaks tampilan.Untuk membunuh terowongan, gunakan
ps -C ssh
ataups | grep ssh
atau varian lain untuk menentukan proses ssh mana yang menjalankan terowongan Anda. Kalau begitu bunuh saja.Atau, Anda dapat mencari proses dengan menentukan port mana yang terbuka:
Jika Anda ingin membunuh semua klien ssh yang berjalan di mesin Anda (sebagai pengguna Anda),
pkill ssh
akan melakukannya.sumber
Seperti yang dijawab oleh orang lain di sini,
pkill ssh
bunuh saja.Untuk membuat terowongan yang dapat dikembalikan, saya memulainya
screen
tanpa-f
opsi, dan kemudian lepaskan layar denganCtrl-A D
. Untuk mengembalikan terowongan, hubungiscreen -r
.sumber
screen
.Ketika saya memulai sebuah terowongan dengan:
-f
Meminta ssh untuk pergi ke latar belakang sebelum eksekusi perintah.-N
Jangan jalankan perintah jarak jauh. Ini berguna untuk hanya meneruskan porta.-D
Menentukan penerusan port tingkat aplikasi "dinamis" lokal.-l
Menentukan pengguna untuk masuk seperti pada mesin jarak jauh.Saya bisa menutupnya dengan:
sumber
Solusi terbaik yang saya temukan untuk membunuh semua terowongan dalam satu baris perintah adalah
ps -lef|grep ssh|grep "\-L"|awk '{print $4}'|xargs kill
untuk sesi ssh, cukup hapus opsi terowongan
ps -lef|grep ssh|awk '{print $4}'|xargs kill
sumber