Как настроить 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.
KLEW
источник

Ответы:

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
Нам Нгуен,
Добавление GatewayPorts Yesк моему sshd_config помогло мне открыть порт для публики.
Адам Ф
8

Причина, по которой вы не можете этого сделать, заключается в том, что вы пытаетесь перенаправить порт 22 на локальном компьютере на порт 8090 на удаленном сервере, и что-то уже работает на порту 22 на локальном сервере. Скорее всего, у вас работает SSH-сервер. Вы можете исправить это, изменив 22 на другое значение. Вы можете проверить, свободен ли порт, запустив:

# netstat -lep --tcp

В этом списке перечислены все прослушиваемые сокеты, поэтому, если порт не указан, он свободен.

Дэвид Пашли
источник
3

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

# lsof -i :2272

если порт свободен, вы ничего не увидите в выводе.

Тарас
источник