Comment savoir si mon tunnel ssh est créé avec succès?

21

Je compte sur le script suivant tunnel.shécrit par d'autres pour garder un tunnel ssh en vie:

#!/bin/bash
export SSH_HOST=tim@server 

if [ ! -f /tmp/.tunnel ] 
then
echo "Creat SSH tunnel"
ssh -f -D 9999 $SSH_HOST "if [ -f ~/.tunnel ]; then rm ~/.tunnel; fi; while [ ! -f ~/.tunnel ]; do echo > /dev/null; done" & 
touch /tmp/.tunnel 
else
echo "Close SSH tunnel"
ssh $SSH_HOST "touch ~/.tunnel" 
rm /tmp/.tunnel 
fi
exit

Pour créer un tunnel ssh persistant, je viens d'émettre tunnel.sh. Le tunnel ne sera pas fermé jusqu'à ce que j'émette à tunnel.shnouveau.

Je me demandais comment je peux vérifier si le tunnel ssh est bien créé avec succès?

Mon utilisation principale du tunnel est d'imprimer des documents sur certaines imprimantes dans le même LAN que le serveur, et les imprimantes ne sont accessibles que depuis le LAN. Après avoir créé un tunnel, maintenant l'impression ne signale aucun problème, mais comme je n'y suis pas physiquement, je ne peux pas vérifier si les documents ont bien été imprimés.

Je pensais que depuis que je suis maintenant dans le LAN grâce au tunnel, mon IP externe devrait être la même que celle du serveur. Mais en réalité, ce ne sont pas les mêmes (je les ai découvert par wget -q -O - checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//'). Je me demande pourquoi? Lorsque je me connecte à un site Web sur Internet avec le tunnel vivant, le serveur n'est-il pas à mi-chemin entre moi et le site Web Internet dans la connexion, en raison du tunnel entre moi et le serveur?

Tim
la source

Réponses:

25

C'est beaucoup plus compliqué qu'il ne faut :-)

Démarrer le tunnel:

ssh -f -N -D 9999 -M -S /tmp/ssh_tunnel_%h.sock -o ExitOnForwardFailure=yes $SSH_HOST && \
echo "ssh tunnel started successfully" || \
echo "ssh tunnel failed to start"

Arrêtez le tunnel:

ssh -S /tmp/ssh_tunnel_%h.sock -O exit $SSH_HOST

.

C'est tout ce que vous devez faire. Si vous voulez les détails, sautez ci-dessous.

Pour votre deuxième question, celle IP. Non, votre IP ne change pas. Tout ce que vous avez fait était de créer un proxy SOCKS via l'hôte distant. Votre système n'utilise pas automatiquement ce proxy, sauf si vous le lui demandez.

Explication SSH
Args pour démarrer le tunnel
-f:: Dites à ssh de se mettre en arrière-plan. Il ne se fond que s'il démarre correctement (coopère avec l' -oargument ci-dessous).
-o ExitOnForwardFailure=yes: Cela indique à ssh de quitter s'il ne peut pas configurer le proxy SOCKS.
-N: N'exécutez pas de commande. Nous voulons juste créer un tunnel, ne rien faire sur l'hôte distant.
-D 9999: Votre proxy SOCKS.
-M: Ceci est requis pour que l'argument -S fonctionne ici.
-S /tmp/ssh_tunnel_%h.sock: Cela lui indique d'utiliser /tmp/ssh_tunnel_HOSTNAME.sock pour son socket de contrôle. L' -Moption lui indique que ssh doit configurer ce socket et ne pas émettre de commandes à un autre ssh écoutant déjà sur le socket. Vous pouvez utiliser ce socket pour configurer des tunnels supplémentaires une fois que ssh est déjà en cours d'exécution. le%h utilise le nom d'hôte de l'hôte distant dans le cadre du nom de fichier.

Args pour arrêter le tunnel
-S /tmp/ssh_tunnel_%h.sock:: Cela devrait être évident. Cependant, puisque nous n'avons pas émis de -M, cela signifie que ssh doit se connecter au socket qui est déjà là et lui dire quoi faire plutôt que de faire quoi que ce soit lui-même.
-O exit: Cela fait partie du -S. Nous disons à l'écoute ssh sur le socket de quitter.
Le $SSH_HOSTest toujours requis ici. Même si vous deviez spécifier un chemin de socket absolu, sans utiliser %hdans le nom de fichier, ssh voudrait toujours qu'un hôte distant soit spécifié. C'est pourquoi j'ai mis le %hdans les arguments. Pourrait aussi bien l'utiliser si ssh va demander l'hôte, et il garde les choses organisées.

Patrick
la source
5

Ce type de tunnel ne change pas vos informations d'adresse IP. Tout ce qu'il fait est de dire à votre ordinateur d'ouvrir le port 9999 et de transmettre les connexions à ce port à la machine distante (tim @ server) via votre connexion ssh. La façon la plus simple de vérifier que la connexion est établie est de se connecter au port sur lequel le transfert a été créé (dans votre exemple 9999):

$ telnet localhost 9999
Essayer le serveur ...
Connecté au serveur.
Le caractère d'échappement est '^]'.

Si vous recevez le message "Connecté au serveur". message, cela signifie que votre tunnel est en place. Si, à la place, vous obtenez: «Impossible de se connecter à l'hôte distant: connexion refusée», votre tunnel n'est pas activé.

Quant à votre deuxième question, pour votre navigateur, votre navigateur n'utilisera pas le tunnel, sauf si vous le lui dites. Dans les paramètres réseau du navigateur, vous pouvez configurer les paramètres de proxy et spécifier localhost: 9999 comme proxy socks5, puis vos connexions Web doivent utiliser le tunnel ssh et semblent provenir de l'adresse IP du serveur.

gabe.
la source
+1 Merci! (1) Lorsque j'imprime sur une imprimante du réseau local, comment sait-on aller sur le port 9999, c'est-à-dire utiliser le tunnel? Pas autre chose? (2) Existe-t-il des types de tunnels qui modifient mes informations d'adresse IP?
Tim
@Tim probablement, cette imprimante particulière a été configurée pour imprimer sur une adresse IP et un port particuliers. Cela dépend de la configuration de votre imprimante. En règle générale, vous pouvez spécifier les deux lorsque vous définissez une imprimante. Oui, il existe des types de tunnels auxquels leurs propres informations IP seront associées. Généralement, pour ceux-ci, vous créez une interface tun / tap séparée en.wikipedia.org/wiki/TUN/TAP qui aura sa propre adresse IP qui lui est attachée, et tout le trafic qui sort de cette adresse semble provenir d'un réseau différent .
gabe.
Merci! Dans les préférences de mon Firefox, dans avancé -> connexion -> paramètres, je choisis la configuration manuelle du proxy et je tape "localhost" pour HTTP Proxy et "9999" pour son port. Après cela, je ne peux plus me connecter à aucun site Web dans Firefox. Je me demande pourquoi?
Tim
@Tim c'est un peu déroutant ... la bonne chose à définir est: l'hôte SOCKS, et non le proxy HTTP. J'ai eu ce même problème la première fois que j'ai essayé cela.
gabe.
1

Dans mon cas (Google Chrome sur Ubuntu 14.10), mon adresse externe change, au moins dans le navigateur. Juste google "Quelle est mon adresse IP?" avec et sans la connexion proxy.

De plus, après avoir configuré le proxy, essayez de détruire le tunnel et voyez si vous pouvez toujours obtenir du trafic. Lorsque je fais cela, Chrome renvoie une erreur "Impossible de se connecter au serveur proxy".

Une autre façon: après tunneling vers l'hôte distant, créez une nouvelle session ssh et exécutez tcpdump -A dst port 80. Ensuite, accédez à une page et vous devriez voir le trafic associé dans le terminal.

onlyanegg
la source