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 autosshes 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 autosshes 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 autosshes 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 sshconexió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.
SIGTERMes el predeterminado, y ese es15.SIGQUITes 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-15no lo apagué , entoncesSIGTERMno se puede usar.pkillsin señal (= thedefault) tampoco terminaautossh.ejecutar auto ssh con:
AUTOSSH_PIDFILE=/var/run/tunnel.pid autosshmátalo con:
kill pidPor cierto
pkill -9 autosshes un error-9se asegura de que el proceso no salga con gracia, por lo que elsshproceso aún está allí cuandoautosshse terminasin
-9sigue siendo malo, si tienes varios túneles funcionando,pkilllos matarás a todosla forma correcta es establecer
AUTOSSH_PIDFILEenv var entonceskillese 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 autosshNO mata los procesos secundarios sshd para mí.Yo uso esta función en mi
.bashrcarchivo.Básicamente, es como agregar un
--killargumento a autossh.Puede ejecutar
which sshywhich autosshverificar 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 dbserver1mata solo las conexiones a dbserver1autossh --kill dbservermatará dbserver1, dbserver2, etc.autossh --kill dbservermatará TODAS las conexiones autosshPara aclarar, DEBE matar solo las sesiones SSH iniciadas por autossh.
Si ejecuta
ps aux | grep sshmientras 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
sshy 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?