Je suis assez perdu à ce sujet. De la page de manuel:
-f Requests ssh to go to background just before command execution.
Après avoir démarré SSH avec l' -f
option, j'ai un tunnel fonctionnel. Mais une fois que j'ai fini de l'utiliser, je ne sais pas comment continuer à interagir avec elle. Par exemple, je ne peux pas fermer le tunnel SSH lorsque je termine.
Les méthodes habituelles que je connais ne fonctionnent pas. Par exemple, jobs
ne renvoie rien. La ~
commande n'est pas reconnue (et je ne sais pas exactement comment l'utiliser, de toute façon).
Cependant, il pgrep
me dit que le tunnel SSH est toujours en cours d'exécution (après la fermeture du terminal, etc.). Comment interagir avec? Comment puis-je le fermer?
la source
/tmp/session1
(bien qu'il soit recommandé de le nommer à l'aide de % patterns - voir la description de ControlPath dansman ssh_config
)ssh -S <path-to-socket> -O exit <server>
commande puisse être n'importe quelle chaîne, mais elle doit être présente. C'est un peu maladroit.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:
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:
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.
la source
vncviewer 127.0.0.1::25091
car vous utilisez la syntaxe du port et non la syntaxe d'affichage.Pour supprimer le tunnel, utilisez
ps -C ssh
oups | grep ssh
ou toute autre variante pour déterminer quel processus ssh exécute votre tunnel. Alors tuez-le.Vous pouvez également rechercher le processus en déterminant celui qui a ce port ouvert:
Si vous voulez tuer tous les clients ssh en cours d'exécution sur votre machine (en tant qu'utilisateur), vous
pkill ssh
le ferez.la source
Comme l'ont répondu d'autres personnes ici, le
pkill ssh
tue.Pour créer un tunnel pouvant être ramené, je le lance
screen
sans l'-f
option, puis détache l'écran avecCtrl-A D
. Pour ramener le tunnel, appelezscreen -r
.la source
screen
.Quand je commence un tunnel avec:
-f
Demande à ssh de passer en arrière-plan juste avant l'exécution de la commande.-N
N'exécutez pas de commande à distance. Ceci est utile pour simplement transférer des ports.-D
Spécifie une redirection de port "dynamique" au niveau de l'application locale.-l
Spécifie l'utilisateur à connecter en tant que sur la machine distante.Je peux le fermer avec:
la source
La meilleure solution que j'ai trouvée pour tuer tous les tunnels en une seule ligne de commande est
ps -lef|grep ssh|grep "\-L"|awk '{print $4}'|xargs kill
pour les sessions ssh, il suffit de supprimer l'option tunnel
ps -lef|grep ssh|awk '{print $4}'|xargs kill
la source