Как настроить SSH туннель для пересылки SSH?

У меня есть компьютер с 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.

3 ответа

Решение

Вы просите его прослушивать ваш локальный порт 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 - более чистые решения).

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

# netstat -lep --tcp

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

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

# lsof -i :2272

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

У меня была такая же проблема, и я побежал

$ ps aux | grep ssh

я нашел это sshd работал в фоновом режиме, поэтому я прервал процесс, я только хочу ssh в другую машину, а не в мою

$ sudo service sshd stop

Другие вопросы по тегам