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