Eu tenho o seguinte problema:
Eu tenho uma máquina remota acessível via ssh que pode servir alguns dados através de uma interface web.
Eu posso usar o OpenSSH LocalForwarding para abrir um túnel e iniciar o servidor remoto:
ssh [email protected] -L 127.0.0.1:3333:localhost:4000 ./start.sh
então, em outro terminal (ou da GUI), posso iniciar um navegador, por exemplo:
firefox localhost:3333/whatever
e acessar o conteúdo servido pelo meu aplicativo.
Após o uso eu simplesmente dou [CTRL-C] para start.sh
fechar servidor, conexão e túnel.
Até agora tudo bem.
A pergunta é: É possível escrever um script combinando tudo de tal forma que o túnel seja fechado quando o navegador terminar?
Para ser mais preciso, gostaria de um script que:
- Abre o túnel e inicia o servidor remoto (como acima).
- Abre automaticamente um navegador (o Firefox está ok, mas não é obrigatório) na porta certa (que pode ser gerada aleatoriamente).
- Mantém o túnel ativo enquanto o navegador está em execução.
- Quando o navegador termina (estou ciente de que pode haver outras janelas abertas, mas isso está além do ponto) ele deve enviar um sinal (
SIGHUP
) para o servidor (start.sh
). - Quando o servidor remoto termina o túnel deve ser fechado (isso deve ser automático com a configuração acima)
Gostaria de manter o túnel e o servidor funcionando pelo tempo estritamente necessário, evitando "esquecer o fechamento", pois pode acontecer se eu tiver que fazer manualmente.
Como posso fazer isso?