12 votes

Pourquoi la déconnexion d'une session SSH se bloque-t-elle lorsqu'on utilise le transfert de port ?

J'utilise le transfert de port SSH dynamique ( -D ) et le transfert de port SSH normal ( -L ou -R ) pour de nombreuses choses différentes, notamment pour ajouter une couche de cryptage à mon trafic web sans fil. La commande que j'utilise normalement ressemble à quelque chose comme ceci :

ssh -l raam -D 9000 my-linux-server.com

Après avoir démarré le tunnel, je configure mon navigateur web pour utiliser un proxy SOCKS v5 de 127.0.0.1 avec le port 9000. Maintenant, tout le trafic dans mon navigateur (sauf le DNS) est transmis par le tunnel SSH.

Lorsque je suis prêt à fermer le tunnel (lorsque j'emmène mon ordinateur portable dans un autre endroit, par exemple), je tape simplement " logout ". Cependant, la session SSH se bloque et je dois appuyer sur CTRL+c pour récupérer mon prompt local.

Pourquoi cela se produit-il et comment puis-je l'éviter ?

(Je suppose que les connexions que j'ai ouvertes via le tunnel restent ouvertes et que mon client SSH local attend qu'elles se ferment avant de me rendre mon invite. Si c'est le cas, comment puis-je forcer toutes ces connexions à se fermer lorsque je suis prêt à me déconnecter) ?

22voto

Sebastian Points 238

Comme vous vous y attendiez, cela se produit parce que SSH ne se retire pas s'il y a des connexions en cours dans le tunnel.

Si vous quittez votre navigateur (et tous les autres programmes qui passent par le tunnel du port 9000), SSH devrait se fermer.

La page de manuel de ssh dit :

 The session terminates when the command or shell on the remote machine exits and all X11 and TCP connections have been closed.

Et je ne vois pas d'options pour changer ce comportement, donc je suppose que vous ne pouvez rien faire.

7voto

Dot Net Pro UK Points 761

Vous pouvez arrière-plan SSH faire :

<enter>~&

4voto

Stick Points 658

Comme indiqué dans le commentaire, vous pouvez créer une connexion par tunnel uniquement en utilisant -f, mais vous aurez toujours le problème de la connexion qui ne se termine pas avant que tout ce qui utilise le tunnel soit sorti. Vous pouvez utiliser l'option ~# (séquence d'échappement et un 'pound') pour lister les connexions transférées que vous avez ouvertes sur une connexion donnée avant de vous déconnecter.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X