Como abrir corretamente um túnel SSH para um programa e fechá-lo depois?

0

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:

  1. 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.

  2. 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?

    
por Petr Pudlák 08.12.2013 / 17:18

1 resposta

0

Consulte link para respostas que contenham Soquete de controle e ExitOnForwardFailure .

    
por 11.12.2013 / 12:05