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


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вариант.


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


0

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

пример

$ vncviewer -via user@host localhost:0

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

              сс # 1

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

    сс # 2

Ссылки


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 или каких-либо промежуточных шагов.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.