Вы просите его прослушивать ваш локальный порт 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 - более чистые решения).
GatewayPorts Yes
к моему sshd_config помогло мне открыть порт для публики.Причина, по которой вы не можете этого сделать, заключается в том, что вы пытаетесь перенаправить порт 22 на локальном компьютере на порт 8090 на удаленном сервере, и что-то уже работает на порту 22 на локальном сервере. Скорее всего, у вас работает SSH-сервер. Вы можете исправить это, изменив 22 на другое значение. Вы можете проверить, свободен ли порт, запустив:
В этом списке перечислены все прослушиваемые сокеты, поэтому, если порт не указан, он свободен.
источник
Я использую команду lsof -i: PortNumber, чтобы проверить, свободен ли порт:
если порт свободен, вы ничего не увидите в выводе.
источник