Encontré la solución aquí: http://www.g-loaded.eu/2006/11/24/auto-closing-ssh-tunnels/
La mejor manera: túneles que se cierran automáticamente
Como se ha mencionado anteriormente, en lugar de usar la combinación de conmutadores -f -N, podemos usar -f solo, pero también ejecutar un comando en la máquina remota. Pero, ¿qué comando debe ejecutarse, ya que solo necesitamos inicializar un túnel?
¡Aquí es cuando dormir puede ser el comando más útil de todos! En esta situación particular, dormir tiene dos ventajas:
- no hace nada, por lo que no se consumen recursos
- el usuario puede especificar por cuánto tiempo se ejecutará
A continuación, se explica cómo estos ayudan a cerrar automáticamente el túnel ssh.
Comenzamos la sesión ssh en segundo plano, mientras ejecutamos el comando de suspensión durante 10 segundos en la máquina remota. El número de segundos no es crucial. Al mismo tiempo, ejecutamos vncviewer exactamente 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
En este caso, se le indica al cliente ssh que bifurque la sesión ssh en segundo plano (-f), cree el túnel (-L 25901: 127.0.0.1: 5901) y ejecute el comando de suspensión en el servidor remoto durante 10 segundos (suspensión 10)
La diferencia entre este método y el anterior (-N switch), básicamente, es que en este caso el objetivo principal del cliente ssh no es crear el túnel, sino más bien ejecutar el comando de suspensión durante 10 segundos. La creación del túnel es una especie de efecto secundario, un objetivo secundario. Si no se usó vncviewer, el cliente ssh saldría después del período de 10 segundos, ya que no tendría más trabajos que hacer, destruyendo el túnel al mismo tiempo.
Durante la ejecución del comando de suspensión, si otro proceso, vncviewer en este caso, comienza a usar ese túnel y lo mantiene ocupado más allá del período de 10 segundos, entonces, incluso si el cliente ssh finaliza su trabajo remoto (ejecución de suspensión), no puede salir porque otro proceso ocupa el túnel. En otras palabras, el cliente ssh no puede destruir el túnel porque también tendría que matar a vncviewer. Cuando vncviewer deja de usar el túnel, el cliente ssh también se cierra, ya que ya ha logrado su objetivo.
De esta manera, no quedan procesos ssh ejecutándose en segundo plano.
/tmp/session1
(Aunque se recomienda nombrarlo usando % patterns - consulte la descripción de ControlPath enman ssh_config
)