объяснение SSH туннелирования

8

У меня есть вопрос по поводу SSH туннелирования. Я прочитал эту статью

Я бы хотел, чтобы X-forwarding работал и запускал некоторые X-приложения дома и отображал их в удаленной системе:

 ssh -X -R 5555:localhost:22 user@remoteserver.com -N

На пульте:

 ssh -X -p 5555 user@192.168.1.2

Потом по дому:

 //configure sshd to listen on 5555
 ssh user@remoteserver.com
 //here run some app

Должно ли это работать?

wawa235
источник
Пожалуйста, попробуйте вместо того, чтобы спрашивать, будет ли это работать.
Wutaz
Да, всегда лучше попробовать что-то, а потом, если это не сработает, спросить почему.
slm
звучит так, как будто вы делаете это задом наперед .. «нормальным» является запуск на пульте дистанционного управления и отображение его локально. если вы хотите отобразить на пульте, расскажите нам о вашей сети, это может быть просто и даже не нужно ssh.
Skaperen

Ответы:

9

Я нарисовал несколько эскизов

Компьютер, на котором набрана команда ssh tunnel, называется « ваш хост» .

SSH туннель, начиная с локального


SSH туннель, начиная с удаленного

Введение

  1. местный: -L Specifies that the given port on the local (client) host is to be forwarded to the given host and port on the remote side.

    ssh -L sourcePort:forwardToHost:onPort connectToHostозначает: подключиться с помощью ssh connectToHostи перенаправить все попытки подключения на локальный sourcePort порт onPortна вызываемом компьютере, доступ к forwardToHostкоторому можно получить с connectToHostкомпьютера.

  2. дистанционный пульт: -R Specifies that the given port on the remote (server) host is to be forwarded to the given host and port on the local side.

    ssh -R sourcePort:forwardToHost:onPort connectToHostозначает: подключиться через ssh connectToHostи перенаправить все попытки подключения к удаленному sourcePort порту onPortна вызываемую машину, доступ к forwardToHostкоторой можно получить с локальной машины.

Ваш пример

Что ж, если вы только хотите, чтобы X-экспедиция работала, т.е. запускала некоторые X-приложения на компьютере дома и отображала их в удаленной системе (назовем это рабочим компьютером, потому что это может быть на вашем рабочем месте), то вы, возможно, не нужен туннель SSH вообще.

Запустить X приложений без туннеля

Можете ли вы просто ssh с рабочего компьютера на домашний компьютер? Если это так, когда вы сидите за рабочим компьютером и хотите запустить приложение X, которое запускается на вашем домашнем компьютере, но отображается на вашем рабочем компьютере , вы должны ввести (на рабочем компьютере):

ssh -X homeuser @ homecomputer firefox

Это запустит Firefox на вашем домашнем компьютере и отобразит его на компьютере, на котором вы ввели эту команду, например, на вашем рабочем компьютере.

Скрытому компьютеру нужен туннель

Это изображение № 3 из моих эскизов. Часто домашний компьютер недоступен напрямую из Интернета, потому что он находится за брандмауэром или скрыт через NAT (от маршрутизатора). Тогда вы можете использовать туннель.

На своем синем домашнем компьютере ( yourhost) вы печатаете:

ssh -R 5555:localhost:22 remoteuser@remotehost

где 5555находится зеленый порт и 22это розовый порт на изображении.

Если вы сейчас находитесь на работе, remotehostподключитесь к зеленому порту и подключитесь к нему 5555, ваше соединение будет туннелировано / перенаправлено на розовый порт вашего домашнего компьютера localhost(т. Е. Самого голубого домашнего компьютера). Теперь вы должны набрать на своем рабочем компьютере:

ssh -X -p 5555 homeuser@localhost firefox

который запустит firefox на вашем домашнем компьютере ( yourhost) и отобразит его на компьютере, на котором вы ввели эту команду, например, на вашем рабочем компьютере ( remotehost).

Erik
источник
1

Вам необходимо указать удаленный дисплей, который вы хотите переслать. На пульте:

DISPLAY=:0 ssh -X -p 5555 user@localhost # not sure why you used 192.168.1.2

Переслать :0дисплей.

Затем в этой оболочке (теперь работающей на вашей домашней машине) выполните:

echo "$DISPLAY"

узнать, что такое перенаправленный дисплей. Это будет что-то вроде этого localhost:10, что означает, что вам нужно установить TCP-соединение через порт 6010 для подключения к дисплею :0на удаленном компьютере (то :0есть для подключения к некоторому сокету домена Unix в чем-то подобном /tmp/.X11-unix)

Затем, чтобы приложение на вашем компьютере отображалось на дисплее удаленного сервера, нужно просто сказать им localhost:10:

DISPLAY=localhost:10 xlogo

например.

Обратите внимание, что это туннель над туннелем.

Стефан Шазелас
источник