Comment fonctionne ssh ProxyCommand?

8

Je suis à l'aise avec l'utilisation de la fonction ProxyCommand de ssh et je peux l'utiliser pour parcourir plusieurs hôtes bastions pour atteindre efficacement l'hôte final. Mais je n'arrive pas à comprendre comment cela fonctionne réellement dans le backend.

Par exemple. J'ai le fichier de configuration suivant.

Host final
Hostname final.com
Port 22
AgentForwarding yes
User guestuser
ProxyCommand "ssh [email protected] -W %h:%p"

Je comprends que pour se connecter à l'hôte final, le ProxyCommand s'exécutera avant d'établir la connexion final.com. Mais je n'arrive toujours pas à comprendre l'ordre des connexions.

Et que fait l'option -W %h:%p? Je comprends que c'est la fonctionnalité netcat et est similaire à nc %h %p.

Donc, pour autant que je sache, c'est la séquence des opérations. Veuillez me faire savoir si je me trompe. J'utiliserai le fichier de configuration spécifié ci-dessus dans mon exemple.

  1. L'utilisateur entre ssh final
  2. Une connexion ssh à bastion.com a été créée.
  3. Un tunnel netcat est créé à partir de bastion.com vers le port 22 de final.com. Le stdin de netcat est connecté au shell obtenu lors de la connexion à bastion.com.
  4. Nous avons donc maintenant une connexion de notre système à final.com. La première moitié de cette connexion est une connexion ssh de notre système à bastion.com. La seconde moitié de cette connexion est un tunnel netcat de bastion.com à final.com.
  5. La ssh finalcommande Now prend la connexion ci-dessus comme proxy et tunnellise ses données via cette connexion existante.

De plus, je voudrais également savoir si cette technique est également connue sous le nom d' empilement ssh ?

ajout de sauts de ligne

Naruto Uzumaki
la source

Réponses:

8

3) Un tunnel netcat est créé à partir de bastion.com vers le port 22 de final.com.

faux, il n'y a pas de netcat.

1) L'utilisateur entre ssh finalsur localhost. Cela lance le processus ssh parent
2) Le ssh parent crée un ssh enfant avec des E / S redirigées vers les canaux
3) Le ssh enfant crée une connexion à bastion.com.
4) Le sshdprocessus sur bastion.com crée une connexion tcp vers final.com:22
5) Un canal ssh est ajouté à la connexion ssh existante entre localhost et bastion.com
6) Le parent ssh écrit les données de prise de contact sur le tuyau, le ssh enfant le lit depuis le tuyau, envoie via le canal ssh à sshd sur bastion.com; sshd le lit et l'écrit dans le socket connecté à final.com. De même, les données sont transmises de final.com à localhost

bassin
la source
Merci pour votre réponse. Cette technique est-elle également connue sous le nom d'empilement ssh ou n'a-t-elle pas de nom?
Naruto Uzumaki
2
Pourriez-vous s'il vous plaît citer une référence? Par exemple manuel. spec ..
qweruiop