21 votes

Comment configurer un tunnel ssh pour transmettre ssh ?

J'ai un ordinateur avec Ubuntu derrière un routeur que je ne peux pas configurer. Cependant, je veux avoir un accès ssh à cet ordinateur. Je pense que c'est possible avec le tunneling ssh, mais je ne sais pas comment le faire. J'ai un autre serveur vers lequel je voudrais configurer le tunneling. Comment faire ? Ou peut-être avez-vous une autre idée pour résoudre ce problème ?

J'ai essayé :

ssh -N user@my_server -L 22/localhost/8090

mais ça dit :

bind: Address already in use
channel_setup_fwd_listener: cannot listen to port: 22
Could not request local forwarding.

26voto

David Spillett Points 22424

Vous lui demandez d'écouter sur votre port local 22 et de transférer les connexions vers le port 8090 d'un système distant. Vous ne pouvez pas faire cela, car votre port 22 local est déjà occupé par votre serveur SSH local.

Je pense que ce que vous recherchez est la redirection à distance. Remplacement de -L 22:localhost:8090 con -R 8090:localhost:22 indiquera à l'hôte distant d'écouter sur le port 8090 et de transmettre les demandes à votre serveur SSH.

Si vous laissez la connexion en cours d'exécution pour pouvoir vous connecter ultérieurement à partir d'un site distant, vous devez vous assurer que la connexion ne s'interrompt pas pour cause d'inactivité en ajoutant les options appropriées ( -o TCPKeepAlive=yes o -o ServerAliveInterval=30 )

Donc vous vous retrouverez avec quelque chose comme :

ssh -N user@my_server -R 8090:localhost:22 -o ServerAliveInterval=30

En outre, si l'un des sauts de réseau entre vous et le serveur est en panne à un moment donné, la connexion sera interrompue malgré les options KeepAlive que vous spécifiez, de sorte que vous pourriez vouloir ajouter cette commande à inittab, ou regarder dans le paquet daemontools ou l'équivalent de votre distro , afin qu'elle démarre toujours au démarrage et soit redémarrée lorsqu'elle se termine pour une raison autre que l'arrêt du système (ou vous pourriez l'exécuter à partir d'un Shell Shell qui boucle à l'infini, mais init ou daemontools sont des solutions plus propres).

8voto

David Pashley Points 22851

La raison pour laquelle vous ne pouvez pas le faire est que vous essayez de transférer le port 22 de l'ordinateur local vers le port 8090 du serveur distant et que quelque chose fonctionne déjà sur le port 22 du serveur local. Il est fort probable que vous ayez un serveur SSH en cours d'exécution. Vous pouvez résoudre ce problème en remplaçant le port 22 par une autre valeur. Vous pouvez vérifier si un port est libre en exécutant :

# netstat -lep --tcp

Ceci liste tous les sockets en écoute, donc si le port n'est pas listé, alors il est libre.

3voto

Juddling Points 857

J'utilise la commande lsof -i :PortNumber pour vérifier si le port est libre :

# lsof -i :2272

si le port est libre, vous ne verrez rien dans la sortie.

1voto

polendina Points 11

J'ai eu le même problème, et j'ai exécuté

$ ps aux | grep ssh

J'ai trouvé que sshd travaillait en arrière-plan, donc j'ai terminé le processus, je veux seulement ssh dans une autre machine, pas dans ma machine

$ sudo service sshd stop

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