Я хочу открыть сеанс удаленного рабочего стола с моего ноутбука на рабочий стол через мой 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 Как уже упоминалось, я задал несколько вопросов по этому поводу. Некоторые из них привели меня ближе к решению и легли в основу моего нынешнего вопроса. Другие мои предыдущие вопросы по этой теме просто показывают мое невежество и неспособность задать вопрос в правильной форме. На данный момент, этот настоящий вопрос представляет мою лучшую способность заявить, в чем заключается моя проблема и каково мое желаемое решение, но некоторые другие мои вопросы все еще остаются открытыми. Вот тот, который имеет отношение.
источник
desktop
находится за маршрутизатором NAT иlaptop
за маршрутизатором NAT.Ответы:
Можете ли вы попробовать сделать второй шаг без выполнения NC? То есть - сделать VNC только с -L и -R. Я считаю, что проблема в том, что ваша сессия netcat подключается к уже открытой. Поэтому при работе с VNC не используйте netcat.
источник
Вместо ProxyCommand вы должны установить «gatewayports yes» для вашего посредника sshd.conf.
После того, как вы заработаете, узнайте больше о более безопасных настройках шлюзов.
источник