Agora que tenho um túnel de autossh, qual é a maneira correta de pará-lo?
Parece não haver uma maneira fácil de fazer isso. A documentação não está clara nesta parte.
A maneira mais fácil parece ser reiniciar a máquina? Isso está correto?
Não, a maneira correta de matar autossh
é simplesmente matar o processo autossh
, nada mais.
A razão é
# file $(which autossh)
/usr/bin/autossh: POSIX shell script, ASCII text executable
isso autossh
é simplesmente um script de shell, não um serviço . Ele inicia um novo programa, em sua última linha,
exec /usr/lib/autossh/autossh "$@"
novamente não é um serviço. Quanto a exec
(você pode checá-lo duas vezes no wiki dos hackers Bash ), é um comando embutido no shell que substitui o shell atual pelo seguinte comando ( /usr/lib/autossh/autossh "$@"
neste caso) sem iniciar um novo processo. Então, a única maneira de parar autossh
é matar o script de chamada, por exemplo
pkill -3 autossh
(obrigado a dviljoen por apontar a importância do uso da bandeira -3 , veja abaixo). Aliás, matar a ssh
conexão não funcionará, porque o comando de chamada ( ou seja , o acima) simplesmente iniciará uma nova conexão assim que perceber que a antiga foi descartada.
SIGTERM
é o padrão, e esse é15
.SIGQUIT
é3
, consulte superuser.com/questions/352147/what-does-kill-3-mean e en.wikipedia.org/wiki/Kill_(command) - Além disso, FWIW, verifiquei e-15
não o encerrei , entãoSIGTERM
não pode ser usado.pkill
sem sinal (= thedefault
) também não terminaautossh
.execute o auto ssh com:
AUTOSSH_PIDFILE=/var/run/tunnel.pid autossh
mate com:
kill pid
BTW
pkill -9 autossh
está errado-9
garante que o processo não saia normalmente, portanto, ossh
processo ainda estará lá quando oautossh
processo for mortosem
-9
ainda é ruim, se você tiver vários túneis em execução,pkill
matará todos elesmaneira correta é definir
AUTOSSH_PIDFILE
env var entãokill
só pidfonte
Procure o processo:
A coluna secon é o número PID
Kill process by PID :)
Use sudo se você não tiver privilégios de root.
fonte
Eu sei que isso foi respondido, mas, ao contrário dos comentários acima, o uso
pkill -3 autossh
NÃO mata os processos filho sshd para mim.Eu uso essa função no meu
.bashrc
arquivo.Basicamente, é como adicionar um
--kill
argumento à reprodução automática.Você pode executar
which ssh
ewhich autossh
verificar os caminhos no seu sistema.Desde que o primeiro argumento não seja
--kill
, ele apenas passa os argumentos para a reprodução automática.Este script mata as instâncias autossh & ssh. Isso é importante se você estiver usando o encaminhamento de porta, porque matar APENAS a instância do autossh não mata o túnel, apenas impede que ele se reconecte se / quando finalmente se desconectar.
Você também pode especificar um termo de pesquisa (nome do host) para eliminar apenas túneis específicos.
autossh --kill dbserver1
mata apenas as conexões com o dbserver1autossh --kill dbserver
mata o dbserver1, o dbserver2, etc.autossh --kill dbserver
mata todas as conexões autosshPara esclarecer, ele deve matar apenas as sessões SSH iniciadas pelo autossh.
Se você executar
ps aux | grep ssh
enquanto tiver sessões autossh e ssh em execução, verá que as iniciadas pelo autossh usam o caminho completo (/ usr / bin / ssh e / usr / lib / autossh / autossh).Este script corresponde apenas aos resultados aos processos iniciados com o caminho específico. Fiz isso porque eu (e presumo que a maioria das pessoas) geralmente digita
ssh
e não o caminho completo, o que evita que eu mate minhas sessões ssh normais.Espero que isso ajude os outros.
fonte
$(which autossh)
vez de simplesmenteautossh
?