Comment supprimer un port transféré SSH

52

J'avais l'habitude ssh -L 10002:192.168.0.30:10002 192.168.1.135d'établir une redirection de port, mais je dois maintenant la supprimer.

Comment puis-je faire cela?

utilisateur16654
la source
Nous réalisons souvent que le port est toujours transféré lorsque nous lançons une nouvelle session SSH exécutant à nouveau la même commande et recevant un Warning: remote port forwarding failed for listen portmessage.
GabLeRoux

Réponses:

56

Si vous utilisez Linux, vous pouvez tuer le processus en:

ps aux | grep ssh

et ensuite utiliser

kill <id>

Pour tuer le processus.

Si la commande kill n’est pas réussie, vous pouvez essayer

kill -9 <id>
zpon
la source
31
Non. Non. S'il vous plaît, veuillez ne pas utiliser kill -9avant d'avoir essayé kill. De nombreux processus auront des gestionnaires de signaux qui nettoieront leur utilisation des ressources, fermeront les connexions proprement et d'autres tâches de pré-arrêt. Si vous tuez avec -9, le processus meurt immédiatement sans nettoyage. Tuer sans -9 va travailler la plupart du temps.
Doug Harris
17
kill -9sans raison, c'est comme utiliser un fusil de chasse pour tuer un moustique. :)
Darren Hall
2
Je fais habituellement un one-line pgrep ssh | xargs kill. N'utilisez pas -9pour rien en effet
GabLeRoux
2
@GabLeRoux Cela suppose que vous n'avez qu'une seule sshcommande, ou que toutes les sshcommandes que vous exécutez sont bonnes à tuer. Ce n’est pas une bonne hypothèse générale.
Tripleee
2
@Avamander Je me connecte à plusieurs sshinstances sur plusieurs serveurs distants à tout moment, certaines sans ma participation active directe. Par exemple, le mode Tramp Emacs ouvre une sshconnexion en coulisse lorsque je visite un tampon distant. Certaines personnes utilisent des systèmes de fichiers en espace utilisateur qui font quelque chose de similaire. Ce n'est pas du tout rare. En fait, je supposerais sshqu'un seul utilisateur, une seule instance soit un cas d'utilisation marginale d'une minorité. Si cela fonctionne pour vous, tant mieux, mais ce n'est pas un bon conseil général.
triple-
20

Lorsque vous utilisez le multiplexage ssh, il est souvent indésirable de tuer le processus ssh (cela tue toutes les connexions ouvertes avec cet hôte) et vous ne pouvez pas accéder facilement à l’échappement car "échappement non disponible pour les sessions multiplexées". La bonne façon consiste alors à exécuter l'analogue de la commande de transfert que vous souhaitez annuler, mais en ajoutant -O cancel. Par exemple:

ssh -O cancel -L 10002:192.168.0.30:10002 192.168.1.135

Cela désactivera cette redirection de port sans mettre fin à la session. Là encore, cela ne fonctionnera que si le multiplexage SSH est utilisé pour la connexion à 192.168.1.135 .

a3nm
la source
Je suis si heureux que cela existe et je l'ai trouvé, merci beaucoup!
Galva
2
C'est la meilleure solution. Pour tuer le maître suffit de courir ssh -O exit 192.168.1.135.
Orient
Si vous n'êtes pas en train de multiplexer, voyez l'excellente réponse d'exhuma! (Merci a3nm d'avoir attrapé ma faute de frappe.)
Alan De Smet
impressionnant! cela devrait être la réponse choisie!
Truong Nguyen
13

Comment annuler un port transféré dans une session SSH déjà en cours d'exécution:

  1. Appuyez sur ~+ C(tilde + C majuscule)
  2. Type -KL port
  3. appuyez sur Entrée

Vous devriez voir ceci:

ssh> -KL 10002
Canceled forwarding.
cambunctious
la source
12

Vous pouvez utiliser la "touche d'échappement" (généralement ~) suivie de C pour obtenir un cli vers votre connexion. Vous pouvez à partir de là supprimer des tunnels sans prendre votre connexion.

Jimmy Hedman
la source
1
J'aimerais connaître les détails de ceci. Je sais que vous pouvez ajouter des tunnels une fois que SSH est entré, mais vous n'avez pas encore trouvé comment en supprimer un.
Carestad
9
Lorsque vous êtes en mode CLI, vous pouvez aider. -KL est l'oppsite de -L, -KR est l'oppsite de -R et -KD est l'oppsite de -D. Faire "escape-key" (~) suivi de # montre vos tunnels.
Jimmy Hedman
1
@ JimmyHedman, vous pouvez modifier votre réponse en plus de l’ajout d’un commentaire. Cela rend tout plus lisible. Et parfois, les commentaires sont cachés (au cas où il y en aurait trop).
Exhuma
7

Vous pouvez entrer dans une console interactive en tapant ~C(majuscule "C"). Cela vous permet d'ajouter et de supprimer dynamiquement les redirections de ports (entre autres).

Cette séquence doit venir juste après un retour chariot / nouvelle ligne. Donc, dans le doute, tapez simplement Enter~C(en séquence).

Si vous ne voyez pas les caractères apparaître sur la console, vous le faites correctement :)

Vous devriez maintenant voir une ssh>invite.

Pour supprimer le port, entrez simplement -KL 10002suivi de Enter(où 10002est votre port transféré).

L'inverse - l'ajout d'un nouvel avant - peut être fait comme ceci (du début à la fin):

Enter~C

ssh> -L 10002:192.168.0.30:10002

Enter

exhuma
la source
C'est la bonne réponse si vous ne multiplexez pas les connexions. Si vous êtes, vous serez rebondi avec ~C escape not available to multiplexed sessions. Si c'est le cas, voir l'excellente réponse de a3nm.
Alan De Smet