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