Nein, der richtige Weg zu töten autossh
ist einfach, den Prozess zu töten autossh
, sonst nichts.
Der Grund ist
# file $(which autossh)
/usr/bin/autossh: POSIX shell script, ASCII text executable
Das autossh
ist einfach ein Shell-Skript, kein Dienst . Es startet ein neues Programm, in seiner allerletzten Zeile,
exec /usr/lib/autossh/autossh "$@"
wieder kein service. Was exec
(Sie können es im Wiki der Bash-Hacker noch einmal überprüfen ) betrifft, so handelt es sich um einen Shell-eingebauten Befehl, der die aktuelle Shell durch den folgenden Befehl ersetzt ( /usr/lib/autossh/autossh "$@"
in diesem Fall), ohne einen neuen Prozess zu starten. Die einzige Möglichkeit, dies zu stoppen, autossh
besteht beispielsweise darin, das aufrufende Skript zu beenden
pkill -3 autossh
( Vielen Dank an dviljoen, der darauf hingewiesen hat, wie wichtig es ist, das Flag -3 zu verwenden, siehe unten). Im Übrigen ssh
funktioniert das Beenden der Verbindung nicht, da der aufrufende Befehl ( dh der oben genannte) einfach eine neue Verbindung startet, sobald er feststellt, dass die alte Verbindung getrennt wurde.
SIGTERM
ist die Standardeinstellung und diese ist15
.SIGQUIT
ist3
, siehe superuser.com/questions/352147/what-does-kill-3-mean und en.wikipedia.org/wiki/Kill_(command) - Auch FWIW, ich habe gerade überprüft und-15
nicht herunter es nicht nach unten, soSIGTERM
kann nicht verwendet werden.pkill
ohne Signal (= dasdefault
) endet auch nichtautossh
.starte auto ssh mit:
AUTOSSH_PIDFILE=/var/run/tunnel.pid autossh
töte es mit:
kill pid
BTW
pkill -9 autossh
ist falsch-9
Stellt sicher, dass der Prozess nicht ordnungsgemäß beendet wird, sodass der Prozess nach dem Beendenssh
immer noch vorhandenautossh
istOhne
-9
ist es immer noch schlimm, wenn Sie mehrere Tunnel laufen haben,pkill
werden sie alle tötenrichtige weise ist es
AUTOSSH_PIDFILE
env var dann nurkill
diese pid zu setzenquelle
Suche nach dem Prozess:
Die zweite Spalte ist die PID-Nummer
Kill-Prozess von PID :)
Verwenden Sie sudo, wenn Sie keine Root-Rechte haben.
quelle
Ich weiß, dass dies beantwortet wurde, aber im Gegensatz zu den obigen Kommentaren werden
pkill -3 autossh
die untergeordneten sshd-Prozesse für mich durch die Verwendung von NICHT beendet.Ich benutze diese Funktion in meiner
.bashrc
Datei.Im Grunde ist es so, als würde
--kill
man autossh ein Argument hinzufügen.Sie können die Pfade auf Ihrem System ausführen
which ssh
undwhich autossh
überprüfen.Solange das erste Argument nicht
--kill
zutrifft, werden die Argumente nur an autossh weitergegeben.Dieses Skript beendet die autossh & ssh-Instanzen. Dies ist wichtig, wenn Sie die Portweiterleitung verwenden, da NUR durch das Beenden der autossh-Instanz der Tunnel nicht beendet wird, sondern nur verhindert wird, dass die Verbindung wiederhergestellt wird, wenn die Verbindung endgültig getrennt wird.
Sie können auch einen Suchbegriff (Hostname) angeben, um nur bestimmte Tunnel zu beenden.
autossh --kill dbserver1
tötet nur die Verbindungen zu dbserver1autossh --kill dbserver
dbserver1 töten, dbserver2 usw.autossh --kill dbserver
tötet alle autossh VerbindungenZur Verdeutlichung SOLLTE es nur die von autossh gestarteten SSH-Sitzungen beenden.
Wenn Sie ausführen,
ps aux | grep ssh
während sowohl autossh- als auch ssh-Sitzungen ausgeführt werden, werden Sie feststellen, dass diejenigen, die mit autossh gestartet wurden, den vollständigen Pfad verwenden (/ usr / bin / ssh und / usr / lib / autossh / autossh).Dieses Skript vergleicht nur Ergebnisse mit Prozessen, die mit dem Pfad "speicifc" gestartet wurden. Ich habe dies getan, weil ich (und ich nehme an, die meisten Leute) normalerweise tippe
ssh
und nicht den vollständigen Pfad, wodurch verhindert wird, dass meine normalen SSH-Sitzungen beendet werden.Hoffe das hilft anderen.
quelle
$(which autossh)
statt einfachautossh
?