Bureau à distance sur tunnel inverse SSH pour remplacer TeamViewer

14

Je souhaite ouvrir une session de bureau à distance de mon ordinateur portable vers le bureau via mon tunnel SSH (inversé). Cela devrait être simple (ou du moins faisable), non? Jusqu'à présent, j'utilisais Team Viewer pour me connecter au bureau distant. J'aimerais obtenir des résultats similaires sans Team Viewer.

Voici à quoi ressemble mon tunnel SSH:

laptop--->nat--->middleman<--nat<--desktop

Toutes les machines tournent sous Linux (principalement Kubuntu 12.04 ou OpenSuse 12.3). Je ne peux changer aucun port ni faire de changements de configuration sur les routeurs nat.

Je décrirai mon tunnel SSH parce que la compréhension qui semble nécessaire pour résoudre le problème VNC / bureau à distance qui est au cœur de ma question. Concernant cette jambe:

middleman<--nat<--desktop

... voici comment cela s'établit:

autossh -M 5234 -N -f -R 1234:localhost:22 [email protected]

Concernant cette jambe:

laptop--->nat--->middleman

Je peux me connecter à un intermédiaire comme suit:

me@laptop:~$ ssh -i ~/.ssh/id_rsa admin@middleman  

Cependant, ce que je dois réellement faire, c'est me connecter directement au bureau, pas à l'intermédiaire. Pour ce faire, j'utilise netcat ("nc") sur un intermédiaire. Sur cette base, il apparaît que nc est requis. J'ai donc édité mon fichier de configuration SSH sur un ordinateur portable pour utiliser ProxyCommand et nc:

me@laptop:~/.ssh$ nano config

Les contenus sont:

Host family_desktops
  ProxyCommand ssh middleman_fqdn nc localhost %p
  User admin
  PasswordAuthentication no
  IdentityFile ~/.ssh/my_id_rsa

middleman_fqdnest comme "middleman.com"

Ensuite, je me connecte simplement au "bureau" en une seule étape:

me@laptop:~$ ssh family_desktops -p 1234

(J'ai obtenu ce travail sur la base de l'aide ici et ici et d'autres questions connexes que j'ai posées. J'ai posé une tonne de questions sur ce sujet parce que je me débattais avec depuis de nombreuses semaines.)

Avec cette connexion SSH, j'atteins un shell entièrement fonctionnel sur mon ordinateur, étiqueté desktop. Parfait.

Maintenant, j'ai juste besoin d'une solution de bureau à distance de type VNC (ou TeamViewer) sur ce tunnel SSH. Comment?

Voici ce que j'ai essayé jusqu'à présent:

intermédiaire <- nat <- bureau

autossh -M 5235 -N -f -R 1235:localhost:5901 [email protected]

avec cette connexion établie:

x11vnc -autoport 5901 

Je regarde pour m'assurer qu'il se connecte au port 5901, ce qu'il fait.

ordinateur portable ---> nat ---> intermédiaire <- nat <- ordinateur de bureau

ordinateur portable ~ / .ssh / config:

Host family_desktops
  ProxyCommand ssh -NL 5901:localhost:1235 middleman.com nc localhost 1235
  User admin
  PasswordAuthentication no
  IdentityFile ~/.ssh/my_id_rsa

Configuration du tunnel:

me@laptop:~$ sudo ssh family_desktops

Client VNC:

connect to localhost:5901

Cela donne une erreur de "serveur non trouvé"

J'ai essayé un certain nombre de variantes de la ProxyCommand, aucune d'entre elles n'a réussi. Évidemment, je devine quels paramètres devraient être dans ProxyCommand et lesquels devraient être sur la ligne de commande ssh. Je peux voir des problèmes potentiels avec ma configuration, mais je n'ai pas été en mesure de comprendre ce qui fera que tout fonctionnera.

PS Comme mentionné, j'ai posé plusieurs questions à ce sujet. Certains d’entre eux m’ont rapproché de la solution et constituent la base de ma question actuelle. D'autres de mes questions antérieures sur ce sujet montrent simplement mon ignorance et mon incapacité à poser la question sous la bonne forme. À ce stade, cette présente question représente ma meilleure capacité à énoncer quel est mon problème et quelle est ma solution souhaitée, mais certaines de mes autres questions sont encore ouvertes. En voici une qui est pertinente.

MountainX
la source
1
Note complémentaire: veuillez ne pas utiliser les liens "ici" ou "ceci" . Donnez un nom significatif à vos liens, par exemple le titre de la question ou de la page Web vers laquelle vous créez un lien.
Marco
Vous n'avez pas posé cette question auparavant? unix.stackexchange.com/questions/82255/…
slm
@slm - voir certains des liens dans ma question. Ce sont certaines de mes questions connexes. J'essaie toujours de trouver une solution et chaque question semble me rapprocher ...
MountainX
Cela semble incroyablement compliqué. J'utilise le bureau à distance de ma machine Windows 8 en SSH sur une machine également sur le même réseau qui a un port ouvert dans le pare-feu.
Tim
@Tim il s'agit d'un tunnel SSH inversé et il est requis car se desktoptrouve derrière un routeur NAT et laptopderrière un routeur NAT.
MountainX

Réponses:

3

Pouvez-vous essayer de faire la deuxième étape sans faire le nc? C'est-à-dire - faites le VNC avec juste -L et -R. Je crois que le problème est que votre session netcat se connecte à un déjà ouvert. Donc, lorsque vous faites le truc VNC, n'utilisez pas netcat.

prateek61
la source
1

Au lieu de ProxyCommand, vous devez définir "gatewayports yes" pour votre intermédiaire sshd.conf.

  1. Ensuite, prenez le tunnel distant du bureau à l'intermédiaire et ouvrez le port TCP x dans intermédiaire et vnc sur local.
  2. Ensuite, prenez le tunnel local de l'ordinateur portable à l'intermédiaire en ouvrant le port vnc à votre hôte local et en le tunnelant vers x.
  3. Ensuite, connectez-vous à localhost: vnc, il passera donc par le tunnel local à l'intermédiaire et le tunnel distant aux ordinateurs portables vnc.

Après l'avoir fait fonctionner, en savoir plus sur les paramètres plus sécurisés des ports de passerelle.

Limalski
la source