122 votes

Transférer le trafic SSH à travers une machine intermédiaire

Le tunneling SSH est très confus pour moi. Je me demande si je peux le faire sous Linux.

J'ai 3 machines..

A. My local machine at home.
B. Machine at work that I can SSH into (middle man).
C. My desktop at work that I can only SSH into from machine B.

Je peux donc SSH de A -> B et de B -> C, mais pas de A -> C.

Existe-t-il un moyen de configurer un tunnel SSH de A à B, de sorte que lorsque je lance d'autres commandes SSH, elles ne fonctionnent qu'à partir de ma machine locale A ? J'essaie essentiellement de cloner un dépôt git du travail à la maison (et je ne peux pas installer git sur la machine B).

Aussi, une fois installé Comment pourrais-je le dérégler aussi ?

0voto

Andrew Wagner Points 159

Si votre employeur fournit un VPN, je vous recommande de l'utiliser à la place.

De cette façon, vous n'aurez pas à configurer d'applications particulières (même ssh), et vous pourrez voir n'importe quelle machine derrière le pare-feu. En outre, l'ensemble de votre trafic sera crypté par le logiciel VPN, ce qui renforcera la sécurité de tout trafic non crypté par inadvertance ou délibérément.

0voto

Brandon Belvin Points 360

YASS Yet Another Simple Solution

ssh -f -L 2222:HostC_IP_or_Name:22 userOnB@hostB sleep 10 &&
    ssh -o HostKeyAlias=HostC -p 2222 userOnC@localhost
  • Première commande : ouvrir une connexion ssh à HostB et dire HostB pour transmettre les connexions de localhost:2222 a HôteC:22 .
  • le site -f paramètre indiquant à SSH de passer en arrière-plan une fois la connexion établie
  • La deuxième commande ouvre simplement une connexion client à localhost:2222
  • Option HostKeyAlias ne sont pas nécessaires, mais peuvent aider à empêcher la connexion à un mauvais hôte.
  • Nota : commande sleep 10 sont nécessaires pour maintenir la connexion jusqu'à ce que la deuxième commande ssh utilise le port transféré. Ensuite, la première ssh se fermera lorsque le deuxième ssh quitter le port transféré.

vous pouvez maintenant exécuter les sessions ssh suivantes :

ssh -o HostKeyAlias=HostC -p 2222 userOnC@localhost

Variante :

ssh -f -L 2222:HostC_IP_or_Name:22 userOnB@hostB sleep 10 &&
    ssh -M -S ~/.ssh/ssh_HostC22userOnC.sock -o HostKeyAlias=HostC -p 2222 userOnC@localhost

des sessions ssh ultérieures pourraient être ouvertes en exécutant :

ssh -S ~/.ssh/ssh_HostC22userOnC.sock userOnC@localhost

Le principal avantage de l'utilisation des paramètres -M et -S est qu'une seule connexion est ouverte de HostA à HostC, la session suivante ne sera pas authentifiée à nouveau et s'exécutera beaucoup plus rapidement.

0voto

nsysdcw Points 1

Cas particulier, plateformes mixtes Nix :

  hôteA (linux) -> hôteB (solaris) -> hôteC (linux)

Si j'ai besoin d'une application X sur l'hôte C, et que le saut intermédiaire est sur la boîte Solaris... dans ce cas, j'ai trouvé le netcat (nc) nécessaire sur la ProxyCommand comme ceci :

hostA:~$ vi .ssh/config :

Host hostC
    ProxyCommand ssh hostB nc %h %p       # where nc is netcat

Le tunnelage automatique fonctionne alors :

hostA:~$ ssh hostC

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