Як налаштувати ssh тунель, щоб переслати ssh?


13

У мене є комп'ютер з Ubuntu за маршрутизатором, який я не можу налаштувати. Однак я хочу мати ssh доступ до цього комп'ютера. Я думаю, що це можливо за допомогою тунелювання на ssh, але я не знаю, як це зробити. У мене є ще один сервер, на який я хотів би налаштувати тунелювання. Як це зробити? А може, у вас є якась інша ідея, як вирішити цю проблему?

Я намагався:

ssh -N user@my_server -L 22/localhost/8090

але це говорить:

bind: Address already in use
channel_setup_fwd_listener: cannot listen to port: 22
Could not request local forwarding.

Відповіді:


18

Ви просите його прослухати ваш локальний порт 22 і переадресувати з'єднання до порту віддаленої системи 8090. Ви не можете цього зробити, тому що ваш локальний порт 22 вже прийнятий вашим локальним сервером SSH.

Я думаю, що ви шукаєте - це дистанційне переадресація. Заміна -L 22:localhost:8090на -R 8090:localhost:22дозволить віддаленому хосту прослухати порт 8090 та направити запити на ваш SSH-сервер.

Якщо ви залишаєте з'єднання запущеним, щоб пізніше ви могли зайти з віддаленого сайту, тоді ви хочете переконатися, що з'єднання не вичерпано через неактивність, додавши відповідні параметри ( -o TCPKeepAlive=yesабо -o ServerAliveInterval=30)

Тож у вас вийде щось на кшталт:

ssh -N user@my_server -R 8090:localhost:22 -o ServerAliveInterval=30

Крім того, якщо один із мережних скачків між вами та сервером в будь-який момент відключений, з'єднання припиниться, незважаючи на будь-які вказані вами параметри KeepAlive, тому ви, можливо, захочете додати цю команду до inittab або заглянути в пакет daemontools або ваш дистрибутив еквівалент, так що він завжди починається під час завантаження і перезапускається, коли він закривається з якоїсь іншої причини, ніж відключення системи (або ви можете запустити його зі скрипту оболонки, який циклічно нескінченний, але init або daemontools - це чистіші рішення).


Це майже працює. Я можу підключитися до свого комп’ютера, але це можу робити лише тоді, коли я ввійшов на сервер. Я хотів би з'єднатися через цей порт звідусіль.
klew

3
Якщо ви додасте загальнодоступну адресу сервера або мак-карду до визначення переадресації портів (-R 111.222.333.444:8090:localhost:22 або -R *: 8090: localhost: 22), це може працювати, хоча така річ можна відключити на сервері. Якщо ви керуєте сервером, переконайтеся, що параметр GatewayPorts увімкнено в sshd_config.
Девід Спіллетт

Я написав сценарій, який допомагає мені робити ssh тунелювання, ви можете перевірити це за адресою: github.com/gdbtek/ssh-tunneling
Nam Nguyen

Додавання GatewayPorts Yesдо моєї sshd_config допомогло мені відкрити порт для публіки.
Адам Ф

8

Причина цього не вдається зробити, тому що ви намагаєтеся переслати порт 22 на локальному комп'ютері на порт 8090 на віддалений сервер, а щось вже працює на порт 22 на локальному сервері. Найімовірніше, у вас працює SSH-сервер. Ви можете виправити це, змінивши значення 22 на інше значення. Ви можете перевірити, чи вільний порт, запустивши:

# netstat -lep --tcp

У цьому списку перераховані всі прослуховувальні розетки, тому якщо порт не вказаний, то він безкоштовний.


3

Я використовую команду lsof -i: PortNumber, щоб перевірити, чи порт вільний:

# lsof -i :2272

якщо порт вільний, ви не побачите нічого у виході.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.