Non, la bonne façon de tuer autossh
est simplement de tuer le processus autossh
, rien d'autre.
La raison est
# file $(which autossh)
/usr/bin/autossh: POSIX shell script, ASCII text executable
c'est autossh
simplement un script shell, pas un service . Il démarre un nouveau programme, dans sa toute dernière ligne,
exec /usr/lib/autossh/autossh "$@"
encore une fois pas un service. Quant à exec
(vous pouvez le vérifier dans le wiki des pirates Bash ), il s'agit d'une commande intégrée au shell qui remplace le shell actuel par la commande suivante ( /usr/lib/autossh/autossh "$@"
dans ce cas) sans démarrer un nouveau processus. Donc, la seule façon d'arrêter autossh
est de tuer le script appelant, par exemple
pkill -3 autossh
(merci à dviljoen d' avoir souligné l'importance d'utiliser l' indicateur -3 , voir ci-dessous). Par ailleurs, la suppression de la ssh
connexion ne fonctionnera pas, car la commande appelante ( c'est-à - dire celle ci-dessus) démarrera simplement une nouvelle connexion dès qu'elle réalisera que l'ancienne a été supprimée.
SIGTERM
est la valeur par défaut, et celle-là l'est15
.SIGQUIT
est3
, voir superuser.com/questions/352147/what-does-kill-3-mean et en.wikipedia.org/wiki/Kill_(command) - Aussi, FWIW, je viens de vérifier et-15
ne l'arrête pas,SIGTERM
ne peut donc pas être utilisé.pkill
sans signal (= ledefault
) ne se termine pas non plusautossh
.lancez auto ssh avec:
AUTOSSH_PIDFILE=/var/run/tunnel.pid autossh
tuez-le avec:
kill pid
BTW
pkill -9 autossh
est un tort-9
s'assure que le processus ne se termine pas correctement, donc lessh
processus est toujours là quand leautossh
processus est tuésans
-9
est toujours mauvais, si vous avez plusieurs tunnels en cours d'exécution,pkill
les tuera tousla bonne façon est de définir
AUTOSSH_PIDFILE
env var alorskill
que pid seulementla source
Recherchez le processus:
La deuxième colonne est le PIDnumber
Tuer le processus par PID :)
Utilisez sudo si vous ne disposez pas des privilèges root.
la source
Je sais que cela a été répondu, mais contrairement aux commentaires ci-dessus, l'utilisation
pkill -3 autossh
ne tue PAS les processus enfants sshd pour moi.J'utilise cette fonction dans mon
.bashrc
fichier.Fondamentalement, c'est comme ajouter un
--kill
argument à autossh.Vous pouvez exécuter
which ssh
etwhich autossh
vérifier les chemins sur votre système.Tant que le premier argument ne l'est pas
--kill
, il passe simplement les arguments à autossh.Ce script tue les instances autossh & ssh. Ceci est important si vous utilisez la redirection de port car, en tuant UNIQUEMENT l'instance autossh ne tue pas le tunnel, cela l'empêche simplement de se reconnecter si / quand il se déconnecte finalement.
Vous pouvez également spécifier un terme de recherche (nom d'hôte) pour supprimer uniquement des tunnels spécifiques.
autossh --kill dbserver1
tue uniquement les connexions à dbserver1autossh --kill dbserver
tuera dbserver1, dbserver2, etc.autossh --kill dbserver
tuera TOUTES les connexions autosshPour clarifier, il DEVRAIT tuer uniquement les sessions SSH démarrées par autossh.
Si vous exécutez
ps aux | grep ssh
alors que vous avez à la fois des sessions autossh et ssh en cours d'exécution, vous verrez que celles démarrées par autossh utilisent le chemin complet (/ usr / bin / ssh et / usr / lib / autossh / autossh).Ce script ne fait correspondre les résultats qu'aux processus démarrés avec le chemin speicifc. Je l'ai fait parce que je (et je suppose que la plupart des gens) tapent généralement
ssh
et non le chemin complet, ce qui l'empêche de tuer mes sessions ssh normales.J'espère que cela aidera les autres.
la source
$(which autossh)
au lieu de simplementautossh
?