Consulte link para respostas que contenham Soquete de controle e ExitOnForwardFailure .
Eu quero executar um comando que precisa de um túnel SSH para sua operação (abrindo conexões TCP repetidamente). Depois de existir, o túnel precisa ser fechado novamente. Os problemas que encontrei são:
Eu posso executar o comando em segundo plano imediatamente, mas não tenho uma maneira confiável de como ter certeza de que o túnel foi configurado:
#!/bin/bash
set -e
ssh -N -L lport:server:port host &
trap "kill $!" EXIT
sleep 1
my program that connects to localhost:lport
Acontece frequentemente que a abertura do túnel demora mais de 1s. Eu também poderia colocar mais tempo, mas a experiência do usuário não é muito boa e ainda não é confiável.
Eu posso deixar o SSH em segundo plano quando a conexão é aberta, mas não consigo encontrar uma maneira confiável de como matá-lo depois, porque não conheço o PID do processo SSH em segundo plano:
#!/bin/bash
set -e
ssh -f -N -L lport:server:port host
# I'd set up a trap ??? EXIT, but for what?
my program that connects to localhost:lport
Existe uma maneira de detectar o PID do processo SSH?
Ou existe outra maneira melhor de resolver a tarefa?
Consulte link para respostas que contenham Soquete de controle e ExitOnForwardFailure .