Port de tunnel sécurisé via l'hôte intermédiaire


23

Je cherche à acheminer un port pour VNC vers ma maison ici. Je dois sauter par-dessus un seul hôte pour ensuite sauter sur ma machine de travail réelle.

  • sittinghere sera ma machine domestique locale
  • hopper sera par le saut intermédiaire que je dois faire
  • overthere sera la machine de travail à distance

Je peux le faire pour SSH dans ma machine de travail:

ssh -t hopper "ssh -t overthere"

Je voudrais utiliser la redirection de port pour transférer le port distant 5900 sur overtherele port local 5900 sittinghere. Cependant, je préférerais pouvoir le faire sans me lier ouvertement à un port, hoppercar n'importe qui sur cette machine pourrait se connecter à ma connexion VNC.

Existe-t-il un moyen pour moi de transmettre ce port à ma machine locale en toute sécurité sans que personne ne puisse y accéder hopper?


Quel client VNC utilisez-vous?
slm

Réponses:


18

Utilisation de la capacité native de SSH pour transférer des ports. De sittinghereexécuter:

 ssh -v -N -L 5900:overthere:5900 user@hopper

Pointez votre client VNC vers localhost:5900et le trafic sera acheminé overthere:5900via la connexion SSH établie surhopper


1
AFAIK, cette solution ne vous aidera pas si 5900 est uniquement lié à l'interface locale (127.0.0.1), comme le tunnel arrive hopper, puis hoppertransfère tout le trafic vers overthere:5900. Si overthere:5900écoute 0.0.0.0ou l'interface donnée, alors cela fonctionnera, mais pas s'il écoute 127.0.0.1.
Naftuli Kay

18

J'ai fini par utiliser des ~/.ssh/confighacks SSH pour y arriver:

Host hopper
    User naftuli
    ForwardAgent yes

Host overthere
    User naftuli
    ForwardAgent yes
    ProxyCommand ssh -q hopper nc overthere 22

Ce que cela signifie, c'est que lorsque j'essaie de me connecter à ssh overtherepartir de sittinghere, il se connecte à hopperpuis connecte par proxy la connexion SSH au port 22 overthere(c'est-à-dire: SSH activé overthere).

Cela a des effets secondaires impressionnants:

ssh -L 5900:localhost:5900 overthere "x11vnc -display :0 -localhost"

Tout fonctionne à merveille et pour autant que je sache, le 5900 n'est pas ouvert hopper, mais uniquement transmis directement de overthereà sittinghere.


Soit dit en passant, j'aurais dû poser cette question dans les commentaires avant, mais la solution dans laquelle vous êtes tombé est tout droit sortie de la page de manuel x11nvc 8-). Désolé, je n'ai pas pensé à demander quel serveur VNC vous utilisiez.
slm

Cela me fait peur, mais ça marche vraiment!
Dale Anderson

1
Dans certaines distributions Linux (par exemple Ubuntu 14.04), netcat-openbsd est installé par défaut. Dans ce cas, ce hack peut ne pas fonctionner. Pour résoudre ce problème, vous devez d'abord installer le package netcat-traditional ( apt-get install netcat-traditional -y). Ensuite, vous devez spécifier explicitement le nctype dans le fichier de configuration (en le remplaçant ncpar nc.traditional).
VeLKerr

@Naftuli: Génial en effet!
parti

1
@AlexanderPozdneev netcat .
taylorthurlow

1

Vous pouvez transférer un port de sittingherevers overtherele port SSH de hopper. Ensuite, vous pouvez utiliser ce port pour accéder overtheredirectement à partir de sittinghere. Dans cette deuxième session SSH, vous pouvez transférer VNC ou tout autre port que vous aimez tout en hopperne voyant qu'une session SSH cryptée.

Première session SSH:

ssh -f -N -L 7022:overthere:22 hopper

Maintenant , dire au client SSH comment il peut atteindre overthereen ajoutant cette config ~/.ssh/configsursittinghere

Host overthere
    HostName hopper
    Port 7022
    HostKeyAlias overthere

Deuxième session SSH:

ssh -f -N -L 5900:localhost:5900 overthere

Ou tout simplement une session SSH interactive régulière sans le tunnel de port VNC:

ssh overthere

Si vous ne voulez pas déranger l'ajout de lignes, ~/.ssh/configvous pouvez toujours lui dire comment se connecter à overtherepartir de la ligne de commande:

ssh -p 7022 hopper

... mais sans le HostKeyAliasSSH ne vérifiera pas overtherecorrectement l'empreinte digitale de la clé.

Toutes les lignes de commande doivent être exécutées à partir de sittinghere.

Soit dit en passant, je pense que vous n'avez probablement pas besoin d'utiliser sshl' -toption de.


1

Connectez d'abord la trémie tout en créant un tunnel entre le travailleur et le PC domestique.

ssh -f ismail@hopper -L 2222:overthere:22 -N

puis faites ssh ro là-bas avec tunnel vnc

ssh -p 2222 -f ismail@localhost -L 5900:localhost:5900

Vous pouvez maintenant vous connecter avec vnc. Au fait, changez la configuration de vnc pour écouter localhost


0

Si vous utilisez le client VNC à vncviewerpartir de la ligne de commande, vous pouvez utiliser le -viacommutateur pour lui dire de passer par tunnel user@hostavant de se connecter au serveur VNC d'un autre hôte.

Exemple

$ vncviewer -via user@host localhost:0

Vous pouvez également utiliser vinagrepour vous connecter via un tunnel SSH comme cela via l'interface graphique. Pour ce faire, configurez votre connexion de la même manière via la boîte de dialogue de connexion dans vinagre:

              SS # 1

Ce qui entraînera votre connexion à venir, tunnelée via l'hôte de tunnel SSH.

    SS # 2

Les références


0

La commande suivante devrait également fonctionner parfaitement

ssh -f -N -J hopper overthere -L 5900:localhost:5900

Il a été testé avec un paramètre supplémentaire pour connecter le serveur PostgreSQL sur un postgres-serverport personnalisé ( -pcommutateur) et également avec l'utilisation d'un nom d'utilisateur personnalisé.

ssh -f -N -J user1@jumphost -p 2222 user2@postgres-server -L 5432:localhost:5432

Comme vous pouvez le voir, cette solution est simple et ne nécessite aucun changement de configuration de ssh ni aucune étape intermédiaire.

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.