Em um script de shell, faço o seguinte:
#!/bin/sh
while true; do ssh -o ExitOnForwardFailure=yes -L 8080:localhost:80 -N server; sleep 1; done &
... rest of the script, which uses the tunnel as made above ...
Isso garante que o túnel seja sempre mantido aberto e, portanto, seja reaberto em caso de perda de conexão. Este túnel é usado em outras partes do script principal, omitido aqui. Essas peças podem lidar com um túnel não funcional, elas simplesmente tentam novamente mais tarde.
Quando o script principal morre, por exemplo devido a um SIGTERM
ou SIGINT
, quero que esse while
loop pare também. Não há necessidade de manter esse túnel aberto depois que o script principal morre.
Qual é a abordagem comum para fazer isso em scripts de shell? Note que eu quero duas coisas:
- impedir a reexecução do
ssh
comando - interrompa e desconecte a sessão atual em andamento
ssh
o mais rápido possível
Não tenho certeza de como fazer tudo isso em scripts de shell.
Observe que atualmente estou trabalhando em plain sh
, mas posso prosseguir bash
se necessário.