3 votes

Établir une connexion SSH entre des machines situées derrière un pare-feu

J'ai deux machines, A et C, qui sont chacune derrière un pare-feu et ne peuvent donc pas accepter de requêtes SSH entrantes sur le port 22. J'ai une troisième machine, B, en dehors des deux pare-feux et je veux SSH de A à C en utilisant B. Je suis capable de faire ce que je pense être appelé un tunnel SSH de C -> B comme suit

ssh -fNR 10000:localhost:22 -i key_file_for_B_on_C user_on_B@B

Suivre ce qui semble être presque ce que je veux sur cette question J'essaie maintenant la commande :

ssh -ti key_file_for_C_on_A -l user_on_C -o "ProxyCommand ssh -ti key_file_for_B_on_A -W %h:%p user_on_B@B" -p 10000 B

Cela ne semble pas fonctionner, j'obtiens l'erreur :

channel 0: open failed: connect failed: Connection timed out

Est-ce la bonne approche ? Quelles sont les erreurs que je pourrais commettre ?

2voto

crimson-egret Points 2977

Je pense que le problème de votre exemple réside dans les arguments finaux. ssh à B, alors que vous devriez énumérer les "destination finale" mais l'hôte/port transféré, qui est le port 10000, mais qui devrait être localhost , pas B , comme B est résolue du point de vue de la A et le port 10000 sur B n'est probablement pas ouvert à l'extérieur . Par exemple, corrigé :

ssh -ti key_file_for_C_on_A -l user_on_C -o "ProxyCommand ssh -ti key_file_for_B_on_A -W %h:%p user_on_B@B" -p 10000 localhost

Pour m'en convaincre, j'ai mis en place la même expérience, bien que légèrement plus simple puisque mon nom d'utilisateur est le même sur tous les hôtes, et que j'utilise la redirection d'agent ; notez que mon hophost (votre B ) accepte ssh sur un port non standard, 2222.

Sur C :

ssh -fNAR 12345:localhost:22 hophost -p 2222

Puis sur A :

ssh -A localhost -p 12345 -o "ProxyCommand ssh -A hophost -p 2222 nc %h %p"

Alternativement, vous pouvez encoder tout cela dans votre fichier .ssh/config sur A :

Host C
  HostName localhost
  Port 12345
  ForwardAgent yes
  #ProxyCommand ssh -A hophost -p 2222 nc %h %p
  ProxyCommand ssh -A hophost -p 2222 -W %h:%p
  #ProxyCommand $HOME/.ssh/proxy -w 2 -h hophost:2222 %h %p

Dans ce cas, votre commande sur A est simplement

ssh C

Note : J'ai également inclus deux alternatives ProxyCommand versions. La première utilise nc au cas où votre ssh est antérieure à la version 5.3, lorsque l'option -W a été ajoutée. L'autre utilise un proxy script que j'utilise depuis longtemps pour passer à travers certains hôtes (comme dans cet exemple) et utiliser la fonction corkscrew pour s'affranchir des pare-feu qui bloquent les flux sortants. ssh . Vous pouvez voir le ssh-proxy script sur mon github. Il simplifie ~/.ssh/config lorsque vous souhaitez utiliser un proxy pour Host * mais je ne promets pas que cela fonctionne toujours dans toutes les situations, car je l'ai modifié au fil du temps en fonction des situations, de sorte que toutes les options peuvent être fragiles ou même défectueuses, mais cela peut aider.

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