Lösung 1:
Sie bitten ihn, Ihren lokalen Port 22 abzuhören und Verbindungen an den Port 8090 eines entfernten Systems weiterzuleiten. Das können Sie nicht tun, da Ihr lokaler Port 22 bereits von Ihrem lokalen SSH-Server belegt ist.
Ich denke, was Sie suchen, ist die Fernweiterleitung. -L 22:localhost:8090
ersetzen mit -R 8090:localhost:22
weist den entfernten Host an, auf Port 8090 zu lauschen und Anfragen an Ihren SSH-Server weiterzuleiten.
Wenn Sie die Verbindung laufen lassen, damit Sie später von einem entfernten Standort aus zugreifen können, sollten Sie sicherstellen, dass die Verbindung nicht aufgrund von Inaktivität unterbrochen wird, indem Sie die entsprechenden Optionen hinzufügen (-o TCPKeepAlive=yes
oder -o ServerAliveInterval=30
)
Am Ende erhalten Sie also etwas wie:
ssh -N [email protected]_server -R 8090:localhost:22 -o ServerAliveInterval=30
Auch wenn einer der Netzwerk-Hops zwischen Ihnen und dem Server zu irgendeinem Zeitpunkt ausfällt, wird die Verbindung trotz aller von Ihnen angegebenen KeepAlive-Optionen unterbrochen, sodass Sie diesen Befehl möglicherweise zu inittab hinzufügen oder in das daemontools-Paket oder das Ihrer Distribution schauen möchten Äquivalent , sodass es immer beim Booten startet und neu gestartet wird, wenn es aus einem anderen Grund als dem Herunterfahren des Systems beendet wird (oder Sie könnten es von einem Shell-Skript ausführen, das eine Endlosschleife durchläuft, aber init oder daemontools sind sauberere Lösungen).
Lösung 2:
Der Grund, warum Sie dies nicht tun können, liegt darin, dass Sie versuchen, Port 22 auf dem lokalen Computer an Port 8090 auf dem Remote-Server weiterzuleiten, und auf Port 22 auf dem lokalen Server bereits etwas ausgeführt wird. Höchstwahrscheinlich haben Sie einen SSH-Server am Laufen. Sie können dies beheben, indem Sie die 22 auf einen anderen Wert ändern. Sie können überprüfen, ob ein Port frei ist, indem Sie Folgendes ausführen:
# netstat -lep --tcp
Dies listet alle lauschenden Sockets auf, wenn der Port also nicht aufgeführt ist, dann ist er frei.
Lösung 3:
Ich verwende den Befehl lsof -i :PortNumber, um zu prüfen, ob der Port frei ist:
# lsof -i :2272
Wenn der Port frei ist, sehen Sie nichts in der Ausgabe.