Pytasz, czy nasłuchuje na lokalnym porcie 22 i przekierowuje połączenia na port 8090 systemu zdalnego. Nie możesz tego zrobić, ponieważ lokalny port 22 jest już zajęty przez lokalny serwer SSH.
Myślę, że to, czego szukasz, to przekazywanie zdalne. Wymiana -L 22:localhost:8090
z -R 8090:localhost:22
powie zdalnego hosta, aby nasłuchiwać na porcie 8090 i przekazuje żądania do serwera SSH.
Jeśli pozostawiasz uruchomione połączenie, aby móc później wejść ze zdalnej witryny, musisz upewnić się, że połączenie nie przekroczy limitu czasu z powodu braku aktywności, dodając odpowiednie opcje ( -o TCPKeepAlive=yes
lub -o ServerAliveInterval=30
)
Więc skończysz z czymś takim jak:
ssh -N user@my_server -R 8090:localhost:22 -o ServerAliveInterval=30
Ponadto, jeśli jeden z przeskoków sieciowych między tobą a serwerem zostanie przerwany w dowolnym momencie, połączenie zostanie przerwane pomimo określonych opcji KeepAlive, więc możesz chcieć dodać to polecenie do inittab lub zajrzeć do pakietu daemontools lub dystrybucji równoważne, aby zawsze uruchamiał się przy rozruchu i był restartowany, gdy kończy działanie z innego powodu niż zamknięcie systemu (lub można go uruchomić ze skryptu powłoki, który zapętla się w nieskończoność, ale init lub daemontools są czystszymi rozwiązaniami).
GatewayPorts Yes
do mojego sshd_config pomogło mi otworzyć port dla publiczności.Nie możesz tego zrobić, ponieważ próbujesz przekierować port 22 na komputerze lokalnym do portu 8090 na serwerze zdalnym, a coś już działa na porcie 22 na serwerze lokalnym. Najprawdopodobniej masz uruchomiony serwer SSH. Możesz to naprawić, zmieniając 22 na inną wartość. Możesz sprawdzić, czy port jest wolny, uruchamiając:
Wyświetla listę wszystkich gniazd nasłuchujących, więc jeśli portu nie ma na liście, oznacza to, że jest bezpłatny.
źródło
Używam polecenia lsof -i: PortNumber, aby sprawdzić, czy port jest wolny:
jeśli port jest wolny, nic nie zobaczysz w danych wyjściowych.
źródło