Comece configurando uma chave SSH personalizada para conectar-se a "myhost". Em seguida, edite seu arquivo .ssh / authorized_keys em "myhost" para que o PID pai do shell seja gravado em um arquivo:
command="echo $PPID > tunnel.pid; bash" ssh-rsa AAA...
Você pode querer ajustar algumas outras configurações de segurança e / ou escrever um script personalizado para apenas escrever o PID e travar. O princípio é o mesmo em ambos os sentidos.
Depois que você tiver o PID do processo que mantém a sessão SSH aberta, é só uma questão de script ...
kill 'cat tunnel.pid'
... para finalizar o processo, fechando assim a sessão SSH.
Observe que você pode usar o sinalizador -i
no comando ssh
para especificar uma chave privada a ser usada na conexão.
Editar: Matar o processo shell não fechará o túnel se houver conexões ativas, então nós matamos o processo SSH pai.
Editar: Embora minha primeira inclinação com qualquer conexão SSH automatizada seja usar chaves SSH, o mesmo processo poderia ser emulado com:
ssh -R 8888:localhost:80 myuser@myhost 'echo $PPID > tunnel.pid; for ((;;)); do sleep 1; done'
Você também pode substituir um script que verifica alguns outros critérios para decidir quando terminar. Essa é provavelmente uma maneira mais limpa de lidar com isso.