J'ai trouvé la solution ici: http://www.g-loaded.eu/2006/11/24/auto-closing-ssh-tunnels/
Le meilleur moyen - Tunnels à fermeture automatique
Comme il a été mentionné précédemment, au lieu d'utiliser la combinaison de commutateurs -f -N, nous pouvons simplement utiliser -f seul, mais également exécuter une commande sur la machine distante. Mais quelle commande doit être exécutée, puisqu'il suffit d'initialiser un tunnel?
C'est à ce moment que dormir peut être la commande la plus utile de toutes! Dans cette situation particulière, le sommeil présente deux avantages:
- il ne fait rien, donc aucune ressource n'est consommée
- l'utilisateur peut spécifier pendant combien de temps il sera exécuté
Comment cela aide à la fermeture automatique du tunnel SSH est expliqué ci-dessous.
Nous commençons la session SSH en arrière-plan, tout en exécutant la commande de veille pendant 10 secondes sur la machine distante. Le nombre de secondes n'est pas crucial. Dans le même temps, nous exécutons vncviewer exactement comme auparavant:
[me@local]$ ssh -f -L 25901:127.0.0.1:5901 me@remote.example.org sleep 10; \
vncviewer 127.0.0.1:25901:1
Dans ce cas, le client ssh doit charger la session ssh en arrière-plan (-f), créer le tunnel (-L 25901: 127.0.0.1: 5901) et exécuter la commande de veille sur le serveur distant pendant 10 secondes (veille). dix).
La différence entre cette méthode et la précédente (-N switch) est que, dans ce cas, l'objectif principal du client ssh n'est pas de créer le tunnel, mais plutôt d'exécuter la commande de veille pendant 10 secondes. La création du tunnel est une sorte d'effet secondaire, un objectif secondaire. Si vncviewer n'était pas utilisé, le client ssh se fermerait au bout de la période de 10 secondes, car il n'aurait plus de travail à faire, détruisant le tunnel en même temps.
Lors de l'exécution de la commande sleep, si un autre processus, vncviewer dans ce cas, commence à utiliser ce tunnel et le maintient occupé au-delà de la période de 10 secondes, alors, même si le client ssh termine son travail distant (exécution de sommeil), il ne peut pas sortir car un autre processus occupe le tunnel. En d'autres termes, le client ssh ne peut pas détruire le tunnel car il devra également tuer vncviewer. Lorsque vncviewer cesse d'utiliser le tunnel, le client ssh se ferme également car il a déjà atteint son objectif.
De cette façon, aucun processus ssh n'est laissé en arrière-plan.
/tmp/session1
(bien qu'il soit recommandé de le nommer à l'aide de % patterns - voir la description de ControlPath dansman ssh_config
)