Надежно туннельный порт через промежуточный хост

23

Я ищу маршрут порта для VNC обратно в мой дом здесь. Я должен перепрыгнуть через один хост, чтобы затем перейти к моей реальной рабочей машине.

  • sittinghere будет моей местной домашней машиной
  • hopper будет промежуточным прыжком мне нужно сделать
  • overthere будет удаленная рабочая машина

Я могу сделать это с SSH на мою рабочую машину:

ssh -t hopper "ssh -t overthere"

Я хотел бы использовать переадресацию портов для перенаправления удаленного порта 5900 на overthereлокальный порт 5900 вкл sittinghere. Тем не менее, я предпочел бы иметь возможность делать это без привязки к открытому порту, так hopperкак любой на этой машине сможет подключиться к моему VNC-соединению.

Могу ли я безопасно перенаправить этот порт на мой локальный компьютер, и никто не сможет получить к нему доступ hopper?

Нафтули Кей
источник
Какой клиент VNC вы используете?
SLM

Ответы:

18

Использование собственной способности SSH для переадресации портов. Из sittinghereвыполнить:

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

Укажите клиенту VNC, localhost:5900и трафик будет проходить overthere:5900через соединение SSH, установленное наhopper

ручей
источник
1
AFAIK, это решение не поможет вам, если 5900 привязан только к локальному интерфейсу (127.0.0.1), как это происходит с туннелем hopper, а затем hopperперенаправляет весь трафик overthere:5900. Если overthere:5900прослушивает 0.0.0.0или данный интерфейс, то он будет работать, но не если он прослушивает 127.0.0.1.
Нафтули Кей
18

Я использовал некоторые SSH- ~/.ssh/configхаки, чтобы это произошло:

Host hopper
    User naftuli
    ForwardAgent yes

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

Что это делает , что , когда я пытаюсь подключиться к ssh overthereс sittinghere, он подключается к , hopperа затем предоставляет интерфейс подключения SSH к порту 22 на overthere(то есть: SSH на overthere).

Это имеет некоторые удивительные побочные эффекты:

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

Все работает потрясающе, и, насколько я могу судить, 5900 не открывается hopper, а только пересылается напрямую из overthereв sittinghere.

Нафтули Кей
источник
Кстати, я должен был спросить об этом в комментариях раньше, но решение, с которым вы столкнулись, прямо из справочной страницы x11nvc 8-). Извините, я не подумал спросить, каким VNC-сервером вы пользовались.
SLM
Это пугает меня, но это определенно работает!
Дейл Андерсон
1
В некоторых дистрибутивах Linux (например, Ubuntu 14.04) netcat-openbsd устанавливается по умолчанию. В этом случае этот хак может не сработать. Чтобы решить эту проблему, вы должны сначала установить netcat-Traditional package ( apt-get install netcat-traditional -y). Затем вы должны явно указать ncтип в файле конфигурации (заменив ncна nc.traditional).
ВелКерр
@Naftuli: Действительно здорово!
пропал
1
@AlexanderPozdneev netcat .
taylorthurlow
1

Вы можете перенаправить порт с sittinghereна overthereпорт SSH через hopper. Затем вы можете использовать этот порт для overthereпрямой связи с sittinghere. Во втором сеансе SSH вы можете пересылать VNC или любые другие порты, которые вам нравятся, пока hopperвидит только зашифрованный сеанс SSH.

Первая сессия SSH:

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

Теперь скажите клиенту SSH , как он может достигнуть overthereпутем добавления этой конфигурации , чтобы ~/.ssh/configнаsittinghere

Host overthere
    HostName hopper
    Port 7022
    HostKeyAlias overthere

Вторая сессия SSH:

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

Или просто обычный интерактивный сеанс SSH без туннеля порта VNC:

ssh overthere

Если вы не хотите добавлять строки, ~/.ssh/configвы все равно можете сказать, как подключиться к ним overthereиз командной строки:

ssh -p 7022 hopper

... но без HostKeyAliasSSH не будет overthereправильно проверять отпечаток ключа.

Все командные строки должны быть запущены из sittinghere.

Кстати, я думаю , что вы , вероятно , не нужно использовать ssh«s -tвариант.

Celada
источник
1

Сначала подключите бункер при прокладке туннеля между рабочим и домашним ПК.

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

тогда сделайте ssh ro overthere с туннелем vnc

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

Теперь вы можете связаться с VNC. Кстати измени конфигурацию vnc, чтобы слушать localhost

ibaydan
источник
0

Если вы используете клиент VNC vncviewerиз командной строки, вы можете использовать -viaкоммутатор, чтобы сообщить ему о туннелировании черезuser@host до подключения к VNC-серверу другого хоста.

пример

$ vncviewer -via user@host localhost:0

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

              сс # 1

В результате ваше соединение будет установлено через туннель SSH.

    сс # 2

Ссылки

SLM
источник
0

Следующая команда также должна работать отлично

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

Он был протестирован с дополнительным параметром для подключения сервера PostgreSQL postgres-serverк настроенному порту ( -pкоммутатору), а также с использованием настроенного имени пользователя.

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

Как видите, решение простое и не требует каких-либо изменений конфигурации ssh или каких-либо промежуточных шагов.

SimonB
источник