Удаленный рабочий стол через SSH обратный туннель, чтобы заменить TeamViewer

14

Я хочу открыть сеанс удаленного рабочего стола с моего ноутбука на рабочий стол через мой SSH (обратный) туннель. Это должно быть просто (или, по крайней мере, выполнимо), верно? До сих пор я использовал Team Viewer для входа на удаленный рабочий стол. Я бы хотел добиться подобных результатов без Team Viewer.

Вот как выглядит мой SSH-туннель:

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

Все машины работают под управлением Linux (в основном Kubuntu 12.04 или OpenSuse 12.3). Я не могу изменить какие-либо порты или сделать какие-либо изменения конфигурации на маршрутизаторах nat.

Я опишу свой SSH-туннель, потому что понимание, что представляется необходимым для решения проблемы VNC / удаленного рабочего стола, которая является сердцем моего вопроса. Относительно этой ноги:

middleman<--nat<--desktop

... вот как это установлено:

autossh -M 5234 -N -f -R 1234:localhost:22 user@middleman.com

Относительно этой ноги:

laptop--->nat--->middleman

Я могу подключиться к посреднику следующим образом:

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

Однако на самом деле мне нужно подключиться напрямую к рабочему столу, а не к посреднику. Для этого я использую netcat ("nc") на посреднике. Исходя из этого, кажется, что nc требуется. Поэтому я редактирую свой конфигурационный файл SSH на ноутбуке, чтобы использовать ProxyCommand и nc:

me@laptop:~/.ssh$ nano config

Содержание:

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

Где middleman_fqdn, как "middleman.com"

Тогда я просто подключаюсь к «рабочему столу» за один шаг:

me@laptop:~$ ssh family_desktops -p 1234

(Я получил эту работу, основываясь на помощи здесь и здесь, и на других связанных с этим вопросах, которые я задавал. Я задал тонну вопросов на эту тему, потому что я боролся с этим в течение многих недель.)

С этим соединением SSH я достигаю полностью функционирующей оболочки на моем компьютере с надписью desktop. Отлично.

Теперь мне просто нужно VNC-подобное (или TeamViewer-подобное) решение для удаленного рабочего стола по этому SSH-туннелю. Как?

Вот что я пробовал до сих пор:

Посредник <- нац <- рабочий стол

autossh -M 5235 -N -f -R 1235:localhost:5901 user@middleman.com

с этим соединением установлено:

x11vnc -autoport 5901 

Я смотрю, чтобы убедиться, что он подключается к порту 5901, что он и делает.

ноутбук ---> физ ---> перекупщик <- нац <- рабочий стол

ноутбук ~ / .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

Настройка туннеля:

me@laptop:~$ sudo ssh family_desktops

VNC клиент:

connect to localhost:5901

Это дает ошибку «сервер не найден»

Я пробовал несколько вариантов ProxyCommand, но ни один из них не был успешным. Очевидно, я угадываю, какие параметры должны быть в ProxyCommand, а какие в командной строке ssh. Я вижу некоторые потенциальные проблемы с моей настройкой, но я не смог понять, что заставит все это работать.

PS Как уже упоминалось, я задал несколько вопросов по этому поводу. Некоторые из них привели меня ближе к решению и легли в основу моего нынешнего вопроса. Другие мои предыдущие вопросы по этой теме просто показывают мое невежество и неспособность задать вопрос в правильной форме. На данный момент, этот настоящий вопрос представляет мою лучшую способность заявить, в чем заключается моя проблема и каково мое желаемое решение, но некоторые другие мои вопросы все еще остаются открытыми. Вот тот, который имеет отношение.

MountainX
источник
1
Примечание: пожалуйста, не используйте ссылки «здесь» или «это» . Укажите содержательное название для ваших ссылок, например, название вопроса или веб-страницу, на которую вы ссылаетесь.
Марко
Вы не задавали этот вопрос раньше? unix.stackexchange.com/questions/82255/...
ОДС
@slm - посмотрите некоторые ссылки в моем вопросе. Это некоторые из моих связанных вопросов. Я все еще пытаюсь найти решение, и каждый вопрос, кажется, приближает меня ...
MountainX
Это кажется невероятно запутанным. Я использую удаленный рабочий стол моего компьютера с Windows 8, используя SSH для компьютера, который находится в той же сети, в которой открыт порт в брандмауэре.
Тим
@Tim, это обратный туннель SSH, и он необходим, потому что desktopнаходится за маршрутизатором NAT и laptopза маршрутизатором NAT.
MountainX

Ответы:

3

Можете ли вы попробовать сделать второй шаг без выполнения NC? То есть - сделать VNC только с -L и -R. Я считаю, что проблема в том, что ваша сессия netcat подключается к уже открытой. Поэтому при работе с VNC не используйте netcat.

prateek61
источник
1

Вместо ProxyCommand вы должны установить «gatewayports yes» для вашего посредника sshd.conf.

  1. Затем перенесите удаленный туннель с рабочего стола на посредника и откройте порт tcp x в middleman и vnc на local.
  2. Затем перенесите локальный туннель с ноутбука на посредника, открыв порт vnc для вашего локального хоста и туннелируя его до x.
  3. Затем подключитесь к localhost: vnc, чтобы он прошел через локальный туннель к посреднику и удаленный туннель к ноутбукам vnc.

После того, как вы заработаете, узнайте больше о более безопасных настройках шлюзов.

Limalski
источник