Sekarang saya memiliki terowongan autossh, apa cara yang benar untuk menghentikannya?
Sepertinya tidak ada cara mudah untuk melakukan ini. Dokumentasi tidak jelas pada bagian ini.
Sepertinya cara mudah untuk reboot mesin? Apakah ini benar?
Tidak, cara membunuh yang tepat autossh
adalah dengan membunuh prosesnya autossh
, tidak ada yang lain.
Alasannya adalah
# file $(which autossh)
/usr/bin/autossh: POSIX shell script, ASCII text executable
itu autossh
hanyalah skrip shell, bukan layanan . Ini memulai program baru, di baris terakhirnya,
exec /usr/lib/autossh/autossh "$@"
lagi bukan layanan. Adapun exec
(Anda dapat mengeceknya di wiki peretas Bash ), ini adalah perintah shell-builtin yang menggantikan shell saat ini dengan perintah berikut ( /usr/lib/autossh/autossh "$@"
dalam hal ini) tanpa memulai proses baru. Jadi, satu - satunya cara untuk berhenti autossh
adalah dengan mematikan skrip panggilan, misalnya
pkill -3 autossh
(terima kasih kepada dviljoen untuk menunjukkan pentingnya menggunakan flag -3 , lihat di bawah). Kebetulan, mematikan ssh
koneksi tidak akan berhasil, karena perintah panggilan ( yaitu , yang di atas) hanya akan memulai koneksi baru segera setelah menyadari bahwa yang lama telah terputus.
SIGTERM
adalah default, dan yang itu15
.SIGQUIT
adalah3
, lihat superuser.com/questions/352147/what-does-kill-3-mean dan en.wikipedia.org/wiki/Kill_(command) - Juga, FWIW, saya baru saja memeriksa dan-15
tidak mematikannya, jadiSIGTERM
tidak bisa digunakan.pkill
tanpa sinyal (= thedefault
) juga tidak berakhirautossh
.jalankan ssh otomatis dengan:
AUTOSSH_PIDFILE=/var/run/tunnel.pid autossh
bunuh dengan:
kill pid
BTW
pkill -9 autossh
itu salah-9
Memastikan proses tidak keluar dengan anggun, jadissh
prosesnya masih ada saatautossh
proses tersebut terbunuhtanpa
-9
itu masih buruk, jika Anda memiliki beberapa terowongan berjalan,pkill
akan membunuh semuanyacara yang benar adalah dengan mengatur
AUTOSSH_PIDFILE
env var makakill
pid itu sajasumber
Cari prosesnya:
Kolom detik adalah nomor PID
Matikan proses dengan PID :)
Gunakan sudo jika Anda tidak memiliki hak akses root.
sumber
Saya tahu ini telah dijawab, tetapi bertentangan dengan komentar di atas, menggunakan
pkill -3 autossh
TIDAK membunuh proses sshd child untuk saya.Saya menggunakan fungsi ini di
.bashrc
file saya .Pada dasarnya, ini seperti menambahkan
--kill
argumen ke autossh.Anda dapat menjalankan
which ssh
danwhich autossh
memeriksa jalur di sistem Anda.Selama argumen pertama tidak
--kill
, itu hanya meneruskan argumen ke autossh.Script ini membunuh instance autossh & ssh. Ini penting jika Anda menggunakan penerusan port karena, HANYA membunuh autossh instance tidak membunuh tunnel, itu hanya mencegahnya menyambung kembali jika / ketika akhirnya terputus.
Anda juga dapat menentukan istilah pencarian (nama host) untuk membunuh hanya terowongan tertentu.
autossh --kill dbserver1
membunuh hanya koneksi ke dbserver1autossh --kill dbserver
akan membunuh dbserver1, dbserver2, dll.autossh --kill dbserver
akan membunuh SEMUA koneksi autosshUntuk memperjelas, itu HARUS membunuh hanya sesi SSH dimulai oleh autossh.
Jika Anda menjalankan
ps aux | grep ssh
sementara Anda menjalankan sesi autossh dan ssh, Anda akan melihat bahwa sesi yang dimulai oleh autossh menggunakan path lengkap (/ usr / bin / ssh dan / usr / lib / autossh / autossh).Script ini hanya mencocokkan hasil dengan proses yang dimulai dengan jalur speicifc. Saya melakukan ini karena saya (dan saya berasumsi kebanyakan orang) biasanya mengetik
ssh
dan bukan path lengkap, yang mencegahnya membunuh sesi ssh normal saya.Semoga ini bisa membantu orang lain.
sumber
$(which autossh)
bukan hanyaautossh
?