La tunnelisation SSH m’embrouille énormément. 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.
Donc, je peux 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 afin que, lorsque j'exécute d'autres commandes SSH, elles fonctionnent uniquement à partir de la 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).
En outre, une fois l'installation .. Comment puis-je le désactiver aussi?
Placez ceci dans votre fichier .ssh/config
sur hostA (voir man 5 ssh_config pour plus de détails):
# .ssh/config on hostA:
Host hostC
ProxyCommand ssh hostB -W %h:%p
Maintenant, la commande suivante va automatiquement tunneler à travers hostB
hostA:~$ ssh hostC
Vous voudrez peut-être ajouter des options telles que -oCiphers=arcfour
et -oClearAllForwardings=yes
pour accélérer les choses, étant donné que l'encapsulation de ssh
dans ssh
est plus onéreuse en termes de calcul et que l'effort supplémentaire requis pour l'encapsuleur n'a pas besoin d'être aussi sécurisé lorsqu'il tunnelise du trafic déjà crypté.
Si vous utilisez OpenSSH avant la version 5.3, l'option -W
n'est pas disponible. Dans ce cas, vous pouvez implémenter ce qui précède à l’aide de netcat (nc
):
ProxyCommand ssh hostB nc %h %p # or netcat or whatever you have on hostB
Edit: C'est la mauvaise approche. Voir à la place la réponse de éphémient . Cette réponse fonctionnera, mais est potentiellement moins sécurisée et certainement moins impressionnante.
Il semble que vous souhaitiez une solution semblable à celle-ci:
ssh -L localhost:22:machinec:22 machineb
Cela vous donnera un Shell sur machineb
. Laisse ça tranquille; minimiser la fenêtre du terminal.
Maintenant, chaque fois que vous établissez une connexion ssh avec localhost
, vous serez réellement connecté à machinec
à machineb
. Lorsque vous avez terminé avec le tunnel, fermez simplement le terminal dans lequel vous avez exécuté la commande ci-dessus.
Notez que vous aurez besoin des privilèges de superutilisateur pour exécuter la commande.
On dirait que vous voulez un alias Shell sur A qui provoque l'apparition de ssh sur C
Pour Shell interactif, vous pouvez utiliser cette commande simple:
ssh -J <user>@<hostB> <user>@<hostC>
Les options -J sont pour sauter .
ssh -f -L 2222:HostC_IP_or_Name:22 userOnB@hostB sleep 10 &&
ssh -o HostKeyAlias=HostC -p 2222 userOnC@localhost
-f
indique à SSH de passer en arrière-plan une fois la connexion établiesleep 10
est nécessaire pour maintenir la connexion jusqu'à ce que la seconde commande ssh utilise le port transféré. Ensuite, le premier ssh sera fermé lorsque le second ssh quittera le port transféré.vous pouvez maintenant exécuter les sessions ssh suivantes:
ssh -o HostKeyAlias=HostC -p 2222 userOnC@localhost
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
les sessions ssh suivantes peuvent ê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 d'HostA à HostC. La session suivante ne s'authentifiera pas et ne sera pas exécutée beaucoup plus rapidement.
Si votre employeur fournit un VPN, je vous conseillerais plutôt de l’utiliser.
De cette façon, vous n’aurez à configurer aucune application spécialement (même ssh), et vous pourrez voir n’importe quelle machine derrière le pare-feu. De plus, tout votre trafic sera crypté par le logiciel VPN, ce qui renforcera la sécurité de tout trafic accidentellement ou délibérément non crypté.
Cas particulier, plates-formes nix mixtes:
hostA (linux) -> HostB (solaris) -> HostC (linux)
Si besoin d'une application X sur hostC, 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 commande de proxy comme suit:
hostA: ~ $ vi .ssh/config:
Hôte hostC ProxyCommand ssh hostB nc% h% p # où nc est netcat
Puis le tunneling automatique fonctionne:
hostA: ~ $ ssh hostC