SSH via plusieurs hôtes à l'aide de ProxyCommand?


11

J'ai une entrée dans ~ / .ssh / config sur mon ordinateur à la maison qui ressemble à ceci:

host foo bar
    ProxyCommand ssh -x -a -q gateway.example.com nc %h 22

gateway.example.comest un serveur au travail qui est connecté à la fois à l'Internet public et à un réseau interne. La boîte de passerelle résout foo et bar en utilisant des entrées dans / etc / hosts.

Mon problème est que je dois atteindre une boîte qui se trouve de l'autre côté de foo. Appelons ça "baz". L'hôte "baz" est sur un autre réseau privé auquel foo est connecté, mais pas celui auquel "gateway" est connecté.

J'ai essayé d'utiliser ceci:

host baz
    ProxyCommand ssh -x -a -q gateway/example.com ssh foo nc %h 22

Mais cela ne fonctionne pas, et je suis un peu hors de ma profondeur. Comment puis-je faire cela?

Je ne pense pas que cela devrait avoir d'importance, mais je le fais dans Ubuntu 10.

Réponses:


13

Facile.

Supposons la configuration réseau suivante:

exemple de configuration réseau

Vous devriez pouvoir utiliser un fichier ~ / .ssh / config qui ressemble à ceci:

host foo bar
    ProxyCommand ssh -x -a -q gateway.example.com nc %h 22

host baz
    ProxyCommand ssh -x -a -q foo nc %h 22

L'idée ici est que votre SSH ne sait comment se rendre à « foo », donc un SSH il réussira. Et à partir de là, vous pouvez "nc" à baz. Et s'il y a d'autres hôtes sur le réseau privé interne à côté de "baz", vous pouvez simplement les ajouter à la ligne "host baz".

Cela traite fondamentalement l'hôte "foo" comme la passerelle vers "baz", tout comme "gateway" est la passerelle vers "foo".

Clair?


13

En ce qui concerne la réponse de ghoti: au lieu d'utiliser netcat ( "ssh ... nc %h 22"), en commençant par OpenSSH 5.4, vous pouvez le faire directement avec: "ssh -W %h:22 ...". De cette façon, vous n'avez pas à vous soucier de savoir si netcat est installé au bon endroit.


1
Grand point, merci. C'est une vieille question, mais je pourrais aussi bien préciser que pendant que j'exécutais Ubuntu sur mon poste de travail, la "passerelle" du serveur était une ancienne Busybox Linux avec OpenSSH 5.3, et les serveurs "foo" et "baz" étaient FreeBSD (OpenSSH 5.4). J'aurais donc eu besoin d'au moins un netcat de toute façon.
Graham

@Graham Non. Seul le client doit avoir 5,4 ou plus pour -Wtravailler. Il repose sur le code de redirection de port côté serveur, qui est beaucoup plus ancien.
kasperd

1

À l'aide de clés privées stockées sur votre ordinateur local, entrez cette commande avec les chemins de clés privés, les noms d'utilisateur du shell et les noms d'hôte / adresses IP modifiés en fonction de vos besoins locaux-> passerelle-> ssh de destination.

Notez que ProxyCommand est préféré au transfert d'agent pour atténuer le risque de compromettre l'authentification par clé privée (en utilisant la passerelle et la connexion d'agent ssh local pour compromettre d'autres hôtes comme si le pirate de l'air avait la clé privée) lorsqu'une passerelle / cavalier est piraté par root.

Commande unique pour proxy SSH vers un serveur (conservez les deux clés privées sur l'ordinateur local):

sudo ssh -i dest_private_key.pem -o "ProxyCommand ssh -W %h:%p -i gate_private_key.pem gate_user@gate_IP" dest_user@dest_IP 

0

C'est ce que je fais pour sauter du réseau protégé vers Internet.

J'utilise mon ordinateur portable pour travailler avec du code lors de la construction . Étant donné que la construction est limitée à l'accès à Internet, pour cloner un dépôt de github.com, je dois d'abord sauter dans la boîte à outils , qui n'a pas accès à Internet non plus. Mais il peut accéder à gw , qui dispose d'Internet.

Comme ça:

Schéma de saut SSH

Mon .ssh/configsur la construction :

Host gw
  ProxyCommand ssh -A -W %h:%p toolbox

Host github.com
  ProxyCommand ssh -A -W %h:%p gw

Explication.

  1. Le point de vue est issu de la construction . Il n'y a aucune configuration sur d'autres serveurs.
  2. Tout d'abord, je déclare que pour accéder à gw, vous devez le faire via la boîte à outils .
  3. Deuxièmement, je déclare que pour accéder à github.com , vous devez le faire via gw . SSH utilise en interne la règle précédente.
  4. En fin de compte, git clone git@github.com:aRepo/Thereça marche!

Clair?

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.