Encontrei a solução aqui: http://www.g-loaded.eu/2006/11/24/auto-closing-ssh-tunnels/
A melhor maneira - túneis que fecham automaticamente
Como foi mencionado anteriormente, em vez de usar a combinação de opções -f -N, podemos apenas usar -f sozinho, mas também executar um comando na máquina remota. Mas, qual comando deve ser executado, já que precisamos apenas inicializar um túnel?
É quando o sono pode ser o comando mais útil de todos! Nessa situação específica, o sono tem duas vantagens:
- não faz nada, então nenhum recurso é consumido
- o usuário pode especificar por quanto tempo será executado
Como estes ajudam no fechamento automático do túnel ssh é explicado abaixo.
Iniciamos a sessão ssh em segundo plano, enquanto executamos o comando sleep por 10 segundos na máquina remota. O número de segundos não é crucial. Ao mesmo tempo, executamos o vncviewer exatamente como antes:
[me@local]$ ssh -f -L 25901:127.0.0.1:5901 me@remote.example.org sleep 10; \
vncviewer 127.0.0.1:25901:1
Nesse caso, o cliente ssh é instruído a colocar a sessão ssh em segundo plano (-f), criar o túnel (-L 25901: 127.0.0.1: 5901) e executar o comando sleep no servidor remoto por 10 segundos (suspensão 10)
A diferença entre esse método e o anterior (opção -N), basicamente, é que, neste caso, o principal objetivo do cliente ssh não é criar o túnel, mas executar o comando sleep por 10 segundos. A criação do túnel é algum tipo de efeito colateral, um objetivo secundário. Se o vncviewer não fosse usado, o cliente ssh sairia após o período de 10 segundos, pois não haveria mais tarefas a serem executadas, destruindo o túnel ao mesmo tempo.
Durante a execução do comando sleep, se outro processo, o vncviewer, nesse caso, começar a usar esse túnel e mantê-lo ocupado além do período de 10 segundos, então, mesmo se o cliente ssh concluir sua tarefa remota (execução da suspensão), ele não poderá sair porque outro processo ocupa o túnel. Em outras palavras, o cliente ssh não pode destruir o túnel porque precisaria matar o vncviewer também. Quando o vncviewer para de usar o encapsulamento, o cliente ssh também sai, pois já atingiu seu objetivo.
Dessa forma, nenhum processo ssh fica em execução em segundo plano.
/tmp/session1
(embora seja recomendado para nomeá-lo usando % padrões - ver ControlPath descrição emman ssh_config
)