![Como abrir corretamente um túnel SSH para um programa e fechá-lo depois?](https://rvso.com/image/1388801/Como%20abrir%20corretamente%20um%20t%C3%BAnel%20SSH%20para%20um%20programa%20e%20fech%C3%A1-lo%20depois%3F.png)
Quero executar um comando que precisa de um túnel SSH para funcionar (abrindo conexões TCP repetidamente). Depois de existir, o túnel precisa ser fechado novamente. Os problemas que encontrei são:
Posso executar o comando em segundo plano imediatamente, mas não tenho uma maneira confiável de 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
Muitas vezes acontece que a abertura do túnel demora mais de 1s. Eu também poderia dedicar mais tempo, mas a experiência do usuário não é muito boa e ainda não é confiável.
Posso deixar o SSH entrar em segundo plano quando a conexão for aberta, mas não consigo encontrar uma maneira confiável de eliminá-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?
Responder1
Verhttps://stackoverflow.com/questions/2241063/bash-script-to-setup-a-temporary-ssh-tunnelpara respostas contendo Control Socket e ExitOnForwardFailure.