Tunneler une connexion ssh via une machine intermédiaire en une seule commande


10

Existe-t-il un moyen, en une seule commande, d'établir une connexion ssh de mon ordinateur A, via l'ordinateur B, vers l'ordinateur C, de sorte que j'aie accès au shell sur l'ordinateur C?

Une ride (qui semble exclure simplement le transfert de la connexion ssh à l'aide de l'option -L) est que j'ai le mot de passe du compte sur l'ordinateur B et que le compte sur l'ordinateur B est autorisé à se connecter au compte sur l'ordinateur C, mais Je n'ai pas le mot de passe du compte sur l'ordinateur C.


Réponses:


8

J'ai compris que vous vouliez simplement vous connecter à l'ordinateur C, pas vraiment tunneler quoi que ce soit de A à C. Donc, cela devrait faire l'affaire:

ssh -t computer-b "ssh computer-c"

Vous devrez peut-être saisir deux fois les mots de passe, d'abord pour l'ordinateur B, puis pour l'ordinateur C, mais cela peut être évité en utilisant l'authentification par paire de clés de ssh.


1
Merci - ça marche! Si je peux être assez audacieux pour demander un suivi. Toutes les idées comment je peux scp un fichier de A à C dans une seule commande?
sanity

C'est un peu délicat. Cela pourrait être fait en ajoutant du tar au mixage, mais s'il ne s'agit que d'un seul fichier et que l'ordinateur B dispose de l'espace disque pour le conserver pendant un certain temps, il est beaucoup plus facile de le copier en deux étapes.
af.

Vous pouvez également le faire trois fois! ssh -t computer-b "ssh -t computer-c 'ssh computer-d'": D
gak

0

Vous souhaitez probablement utiliser la ProxyCommand de SSH: http://benno.id.au/blog/2006/06/08/ssh_proxy_command


Je ne peux pas trouver un moyen de faire fonctionner cela parce que je n'ai pas le mot de passe pour l'ordinateur C, et cette approche semble l'exiger. Ouvert aux suggestions car cette approche semble plus élégante.
sanity

0

Si vous utilisez des clés ssh, vous pouvez générer une nouvelle clé pour la machine B et l'utiliser pour la connexion de A à B. Sur la machine B, vous pouvez ajouter

command="ssh C" ssh-....

dans le ~/.ssh/authorized_keysfichier. Cela signifie que chaque fois que vous vous connectez à B avec cette clé ssh, il exécute la ssh Ccommande.

Je ne sais pas si cela fonctionne avec scp.


0

Utilisation ProxyCommand

Tu vois man ssh_config. Je recommande d'utiliser ProxyCommand. Prenons votre scénario d'origine:

  • Ordinateur A (votre ordinateur)
  • Ordinateur B (un nom d'hôte proxy)
  • Ordinateur C (accessible uniquement via SSH à partir de l'ordinateur B)

Modifiez ~/.ssh/configavec le contenu suivant.

Host computerb
    HostName <hostname or IP of Computer B>

Host computerc 192.168.35.*
    ProxyCommand ssh computerb nc -w 180 %h %p

Vous pourrez désormais accéder de manière transparente à l'ordinateur C. Par exemple

ssh computerc

Avantages de cette méthode

Plus sécurisé

Vous n'avez besoin que de votre clé privée pour être sur l'ordinateur A (votre ordinateur). La nccommande agira comme un proxy dans lequel SSH cryptera le trafic. Cela inclut l'authentification. C'est une très mauvaise idée de distribuer votre clé privée sur plusieurs serveurs (car tout serveur compromis avec votre clé privée compromet finalement votre clé privée).

Correspond à plusieurs destinations

On peut faire correspondre plusieurs ordinateurs de destination à l'aide Host. Un seul ordinateur ou tout ordinateur au sein d'un réseau spécifique (par exemple 192.168.35.0/24dans l'exemple ci-dessus) à proxy via l'ordinateur B. Il sert également d'alias.

ssh 192.168.35.27

Dans l'exemple ci-dessus, il effectuera un proxy via l'ordinateur B pour accéder à l'adresse IP.

Mandataires en guirlande

En utilisant cette méthode, vous pouvez chaîner autant de proxys automatiques que nécessaire. Par exemple, vous pouvez ajouter un ordinateur D qui n'est accessible qu'à partir de l'ordinateur C et il fonctionnera de manière transparente.

Host computerd
    ProxyCommand ssh computerc nc -w 180 %h %p

ssh computerdsera automatiquement proxy via l'ordinateur C et l'ordinateur B dans les ssh_configexemples ci-dessus .


J'utilise ProxyJump au lieu de ProxyCommand et cela fonctionne très bien. Il semble qu'il y ait maintenant plus d'options.
fgiraldeau
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.