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


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.
Naftuli Kay

18

Я в кінцевому підсумку використовував деякі ~/.ssh/configхакі SSH, щоб це сталося:

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 man 8-). Вибачте, я не думав запитувати, який сервер VNC ви використовуєте.
slm

Це відлякує bejeezus від мене, але це, безумовно, працює!
Дейл Андерсон

1
У деяких дистрибутивах Linux (наприклад, Ubuntu 14.04) netcat-openbsd встановлюється за замовчуванням. У цьому випадку цей злом може не працювати. Щоб вирішити цю проблему, слід спочатку встановити netcat-традиційний пакет ( apt-get install netcat-traditional -y). Тоді вам слід чітко вказати ncтип у конфігураційному файлі (замінивши ncна nc.traditional).
VeLKerr

@Naftuli: Дивовижно!
пішов

1
@AlexanderPozdneev netcat .
Тейлортурлов

1

Ви можете переслати порт з sittinghereна overthereSSH порт через 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' -t.


1

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

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

потім зробіть ssh ro тунель з 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 тунель, як так, через GUI. Для цього встановіть зв’язок подібним до цього через діалогове вікно підключення у vinagre:

              ss №1

Це призведе до того, що ваш зв’язок підійде, тунельований через хост тунелю SSH.

    ss №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.