Ho trovato la soluzione qui: http://www.g-loaded.eu/2006/11/24/auto-closing-ssh-tunnels/
Il modo migliore: tunnel che si chiudono automaticamente
Come è stato menzionato in precedenza, invece di utilizzare la combinazione di switch -f -N, possiamo semplicemente usare -f da solo, ma anche eseguire un comando sul computer remoto. Ma quale comando deve essere eseguito, dato che dobbiamo solo inizializzare un tunnel?
Questo è quando il sonno può essere il comando più utile di tutti! In questa particolare situazione, il sonno ha due vantaggi:
- non fa nulla, quindi nessuna risorsa viene consumata
- l'utente può specificare per quanto tempo verrà eseguito
Di seguito viene spiegato come questi aiuti nella chiusura automatica del tunnel SSH.
Iniziamo la sessione ssh in background, mentre eseguiamo il comando sleep per 10 secondi sul computer remoto. Il numero di secondi non è cruciale. Allo stesso tempo, eseguiamo vncviewer esattamente come prima:
[me@local]$ ssh -f -L 25901:127.0.0.1:5901 me@remote.example.org sleep 10; \
vncviewer 127.0.0.1:25901:1
In questo caso, al client ssh viene richiesto di eseguire il fork della sessione ssh in background (-f), creare il tunnel (-L 25901: 127.0.0.1: 5901) ed eseguire il comando sleep sul server remoto per 10 secondi (sleep 10).
La differenza tra questo metodo e quello precedente (switch -N), sostanzialmente, è che in questo caso l'obiettivo principale del client ssh non è quello di creare il tunnel, ma piuttosto di eseguire il comando sleep per 10 secondi. La creazione del tunnel è una sorta di effetto collaterale, un obiettivo secondario. Se vncviewer non fosse utilizzato, il client ssh sarebbe uscito dopo il periodo di 10 secondi, poiché non avrebbe più lavoro da fare, distruggendo il tunnel allo stesso tempo.
Durante l'esecuzione del comando sleep, se un altro processo, in questo caso vncviewer, inizia a utilizzare quel tunnel e lo mantiene occupato oltre il periodo di 10 secondi, quindi, anche se il client ssh termina il suo lavoro remoto (esecuzione del sonno), non può uscita perché un altro processo occupa il tunnel. In altre parole, il client ssh non può distruggere il tunnel perché dovrebbe uccidere anche vncviewer. Quando vncviewer smette di usare il tunnel, anche il client ssh esce, poiché ha già raggiunto il suo obiettivo.
In questo modo, nessun processo ssh viene lasciato in esecuzione in background.
/tmp/session1
(Anche se si consiglia di nominarlo usando % pattern - vedi la descrizione di ControlPath inman ssh_config
)