Comment accéder à un serveur auquel je ne peux pas accéder directement?

17

Le contexte

J'utilise Ubuntu Desktop comme ma machine principale, que j'appellerai D. Je veux me connecter au serveur S via ssh, mais le pare-feu me bloque.

J'ai accès au serveur S, via un chemin très encombrant, impliquant une machine virtuelle Windows et PuTTY . Cela rend le travail avec ce serveur extrêmement ennuyeux: environnement complètement différent, le copier / coller ne fonctionne pas, je ne peux pas utiliser correctement mon bureau tout en y étant connecté (Alt-Tab est cassé par la machine virtuelle), etc.

J'ai vérifié que je peux ssh du serveur S à ma machine de bureau D (l'opposé de ce dont j'ai besoin).

Puis-je en quelque sorte initier une "redirection de port" ou similaire à partir du serveur, afin que je puisse ssh vers le serveur depuis mon bureau?

dangonfast
la source
2
Sautez les hôtes ... je dois les aimer !!!
RonJohn
Copie possible de Tunnel SSH de A-> B-> C
muru
@muru c'est un scénario différent, mais bien sûr lié (il s'agit de tunnel après tout!). Dans ce cas, je veux truquer D->Sen abusantS->D
dangonfast

Réponses:

32

Vous pouvez utiliser la commande suivante pour configurer un tunnel SSH du serveur distant vers votre ordinateur local:

$ ssh -f -N -R 1234:localhost:22 user@your_machine_ip

Lorsque le tunnel est configuré, vous pouvez simplement ssh vers votre serveur distant en utilisant la commande suivante:

$ ssh -p 1234 user@localhost

Veuillez noter que vous devez configurer des clés ssh pour la connexion automatique (pas d'invite de mot de passe). Si vous souhaitez créer le tunnel SSH de manière interactive, vous pouvez supprimer les options -f -N. Pour plus d' informations, man ssh.

Khaled
la source
Comment fonctionne ce tunnel à travers la machine virtuelle Windows? (Là où je travaille, il y a plusieurs couches de pare-feu et seuls quelques ports sont ouverts.)
RonJohn
@RonJohn Je crois que cela utilise le fait que (pour OP) ssh-ing du serveur vers le bureau fonctionne, donc cela établit un tunnel du serveur (port 22) directement vers la machine de bureau (port 1234) qui peut être utilisé pour se connecter à ssh sur le serveur (qui utilise le port 22). La machine virtuelle Windows n'est utilisée que pour configurer le tunnel. (veuillez me corriger si je me trompe)
pizzapants184
@dangonfast En plus de la réponse, vous pourriez trouver le document de valeur suivant: spencerstirling.com/computergeek/sshtunnel.html
Pryftan
@RonJohn Le document auquel je viens de lier pourrait également aider à répondre à cette question, du moins en ce qui concerne plusieurs couches de pare-feu, etc. (si la mémoire me sert bien - cela fait très longtemps que je ne l'ai pas lu. souviens avoir eu le lien il y a des années).
Pryftan
1
@ pizzapants184 en effet, c'était mon point de départ: ssh de S -> D, donc je veux en abuser pour faire efficacement D -> S, même si cela ne fonctionne pas directement. Pourquoi le réseau est-il configuré comme ça, c'est quelque chose qui m'échappe. Cela pourrait être intentionnel ou une mauvaise configuration, mais tant que cela fonctionne pour moi ...
dangonfast
5

Si vous utilisez une version plus récente d'OpenSSH (7.3+), vous pouvez utiliser ProxyJumpce qui fait tout cuire par magie:

ssh -J windows_machine remote_server

Lequel ~/.ssh/configressemble à:

Host remote_server
        HostName remote_server
        ProxyJump windows_machine
        User myname

ProxyJumpprend en charge la syntaxe SSH complète, donc si vous êtes jimactivé windows_serveret qu'il utilise le port 2222pour ssh. remote_serverest à IP à 192.168.0.110partir du windows_serveralors vous pouvez écrire:

Host remote_server
        HostName 192.168.0.110
        ProxyJump jim@windows_machine:2222
        User myname

Et toujours courir ssh remote_serverpour y arriver.


Si vous exécutez une ancienne version de SSH, utilisez ProxyCommand - cela vous permet de dire à SSH d'exécuter d'abord une commande pour établir une connexion proxy, avant d'exécuter la commande SSH réelle.

ssh -o ProxyCommand='ssh -W %h:%p windows_machine' remote_server

Cela utilise l' option SSH -W , qui est un raccourci pour la syntaxe Netcat plus obscure .

Notez que, comme lorsque vous exécutez, ssh remote_servervous êtes maintenant sur le, windows_machinevous devez vous assurer que vous utilisez l'IP de la remove_server boîte de saut plutôt que l'IP de votre machine - ceux-ci peuvent bien être les mêmes.

Vous pouvez ensuite ajouter cette directive à votre ~/.ssh/configfichier:

Host remote_server
  HostName remote_server
  User myname
  ProxyCommand ssh -W %h:%p windows_machine

Cela signifie que si remote_server est une machine différente comme vu depuis, windows_machinevous pouvez le mettre dans la configuration et toujours l'utiliser ssh remote_server.

Boris l'araignée
la source
1
C'est une bien meilleure réponse.
Robert Riedl
Bien qu'utile, cela ne répond pas à la question posée. OP indique qu'ils ne peuvent pas SSH de D-> S (ce qu'ils veulent), mais ils peuvent SSH de S-> D. Il n'y a pas de proxy ssh entre les deux (il y a à la place la machine virtuelle Windows, probablement accessible par RDP).
mbrig
@mbrig en effet. Je n'ai pas essayé cette solution, mais je serais surpris si cela fonctionne: je suis pare-feu de D -> S
dangonfast
Mais vous dites que vous pouvez accéder à la machine Windows - à partir de là, j'ai compris qu'elle peut servir de boîte de saut entre vous et l'autre machine.
Boris the Spider
1
Je peux me connecter à la machine Windows avec un outil propriétaire (VMWare Horizon). Je n'ai jamais dit que je pouvais y aller. J'ai même testé cela avant de poster cette question en installant le serveur ssh compagnon Putty (j'ai oublié le nom), mais mes tests ont échoué. Je suppose que ssh est également protégé par un pare-feu sur le sous-réseau Windows.
dangonfast
1

Plutôt que d'essayer de contourner les choses et de créer un chemin alambiqué, ne pouvez-vous pas simplement demander que SSH de votre bureau vers le serveur soit autorisé? Si vous en avez besoin et que vous devez accéder au serveur, je ne vois pas pourquoi vous refuseriez la demande.

Éruption solaire
la source
Vous voulez expliquer le downvote? La question est "Comment accéder à un serveur auquel je ne peux pas accéder directement?" donc ma réponse pour avoir une règle de pare-feu mise en place pour l'autoriser est valide. C'est également le bon moyen de le contourner conformément aux bonnes pratiques de sécurité.
Solarflare
Je suis dans ma première semaine d'un contrat de trois mois d'une grande entreprise cliente. On ne m'a pas donné d'ordinateur portable (j'utilise le mien), et à peine un bureau. J'ai des dizaines d'informations d'identification pour utiliser les différents services et je parviens à peine à jongler avec le tout. Ce que je veux faire n'est pas une exigence difficile pour effectuer mon travail: je peux travailler dans la machine virtuelle, et c'est ce que mon patron me dira si je commence à poser des questions drôles. Ou il me dirigera vers le Help Desk qui ouvrira la boîte au cours des prochaines semaines / mois.
dangonfast
Pour moi, travailler dans la machine virtuelle signifiera facilement une perte de productivité de 50%, donc je veux l'éviter autant que possible. Pourtant, j'adore ce concert!
dangonfast
1
Je peux comprendre cela. D'après mon expérience, les «grandes entreprises clientes» ont tendance à être assez contrariées lorsque les entrepreneurs contournent les pare-feu et les politiques afin de faire leur travail, même à des fins altruistes. Le fait que vous puissiez SSH du serveur à votre bureau me dit que soit vous ne pouvez pas faire l'inverse est une erreur ou quelque chose qui a été mis en place dans un but précis.
Solarflare
4
C'est la seule vraie solution si vous voulez éviter le risque de se faire virer pour contournement des politiques ... Au minimum, parlez aux personnes responsables avant d'utiliser la solution Khaleds pour qu'elles sachent ce que vous faites.
Sven