Ahora que tengo un túnel autossh, ¿cuál es la forma correcta de detenerlo?
Parece que no hay una manera fácil de hacer esto. La documentación no está clara en esta parte.
¿La forma más fácil parece ser reiniciar la máquina? ¿Es esto correcto?
No, la forma correcta de matar autossh
es simplemente matar el proceso autossh
, nada más.
La razón es
# file $(which autossh)
/usr/bin/autossh: POSIX shell script, ASCII text executable
eso autossh
es simplemente un script de shell, no un servicio . Comienza un nuevo programa, en su última línea,
exec /usr/lib/autossh/autossh "$@"
De nuevo no es un servicio. En cuanto a exec
(puede verificarlo en la wiki de los piratas informáticos de Bash ), es un comando integrado en el shell que reemplaza el shell actual con el siguiente comando ( /usr/lib/autossh/autossh "$@"
en este caso) sin iniciar un nuevo proceso. Entonces, la única forma de detenerse autossh
es matar el script de llamada, por ejemplo
pkill -3 autossh
(gracias a dviljoen por señalar la importancia de usar la bandera -3 , ver más abajo). Por cierto, matar la ssh
conexión no funcionará, porque el comando de llamada ( es decir , el anterior) simplemente comenzará una nueva conexión tan pronto como se dé cuenta de que la anterior se ha caído.
SIGTERM
es el predeterminado, y ese es15
.SIGQUIT
es decir3
, consulte superuser.com/questions/352147/what-does-kill-3-mean y en.wikipedia.org/wiki/Kill_(command) - Además, FWIW, acabo de comprobarlo y-15
no lo apagué , entoncesSIGTERM
no se puede usar.pkill
sin señal (= thedefault
) tampoco terminaautossh
.ejecutar auto ssh con:
AUTOSSH_PIDFILE=/var/run/tunnel.pid autossh
mátalo con:
kill pid
Por cierto
pkill -9 autossh
es un error-9
se asegura de que el proceso no salga con gracia, por lo que elssh
proceso aún está allí cuandoautossh
se terminasin
-9
sigue siendo malo, si tienes varios túneles funcionando,pkill
los matarás a todosla forma correcta es establecer
AUTOSSH_PIDFILE
env var entonceskill
ese pid solofuente
Busca el proceso:
La segunda columna es el número PID
Proceso de eliminación por PID :)
Use sudo si no tiene privilegios de root.
fuente
Sé que esto ha sido respondido, pero al contrario de los comentarios anteriores, el uso
pkill -3 autossh
NO mata los procesos secundarios sshd para mí.Yo uso esta función en mi
.bashrc
archivo.Básicamente, es como agregar un
--kill
argumento a autossh.Puede ejecutar
which ssh
ywhich autossh
verificar las rutas en su sistema.Mientras el primer argumento no lo sea
--kill
, simplemente pasa los argumentos a autossh.Este script mata las instancias de autossh y ssh. Esto es importante si está utilizando el reenvío de puertos porque, al matar SOLAMENTE la instancia de autossh no mata el túnel, solo evita que se vuelva a conectar si / cuando finalmente se desconecta.
También puede especificar un término de búsqueda (nombre de host) para eliminar solo túneles específicos.
autossh --kill dbserver1
mata solo las conexiones a dbserver1autossh --kill dbserver
matará dbserver1, dbserver2, etc.autossh --kill dbserver
matará TODAS las conexiones autosshPara aclarar, DEBE matar solo las sesiones SSH iniciadas por autossh.
Si ejecuta
ps aux | grep ssh
mientras tiene las sesiones autossh y ssh ejecutándose, verá que las iniciadas por autossh usan la ruta completa (/ usr / bin / ssh y / usr / lib / autossh / autossh).Este script solo hace coincidir los resultados con los procesos iniciados con la ruta específica. Hice esto porque (y supongo que la mayoría de las personas) usualmente escribo
ssh
y no la ruta completa, lo que evita que mate mis sesiones ssh normales.Espero que esto ayude a otros.
fuente
$(which autossh)
lugar de simplementeautossh
?