Ich habe eine SSH-Verbindung mit Portweiterleitung eingerichtet, mit der Remote-Hosts wie folgt eine Verbindung zu den lokal weitergeleiteten Ports herstellen können:
ssh -g -L 5115:localhost:5115 <server>
Die Verbindung funktioniert einwandfrei, obwohl folgende Fehlermeldung angezeigt wird:
bind: Adresse wird bereits verwendet
Ich erhalte diese Nachricht, egal welche Ports ich wähle. Ich frage mich, warum ich diese Nachricht erhalte, obwohl die Verbindung einwandfrei zu funktionieren scheint. Mache ich etwas falsch?
ssh
port-forwarding
Curt
quelle
quelle
netstat --inet --inet6 -nlp | grep 5115
?-g
ermöglicht Remote-Hosts die Verbindung zu einem weitergeleiteten Port. 'localhost' weist es an, an eine IP zu binden, die von einem Remote-Host nicht erreicht werden kann. Ändern Sie localhost in die IP-Adresse des lokalen Systems (nicht 127.0.0.1) und sehen Sie, was Sie erhalten.ssh
durchstrace
und einen Blick auf den letzten syscalls vor der Fehlermeldung haben:strace -o ssh.strace ssh -g -L 5115:localhost:5115 <server>
. Beenden Siessh
die Verbindung, sobald die Verbindung hergestellt ist, und sehen Sie sich die Datei anssh.strace
.-L cport:shost:sport
ist der Host, mit dem der Server für Tunnelverbindungen spricht. Das Client- Ende lauscht standardmäßig auf Loopback (127.1), wodurch nur Prozesse auf localhost eine Verbindung herstellen können.-g
bewirkt, dass stattdessen ANYADDR (0 oder :: 0) abgehört wird, wodurch auch Remote-Prozesse möglich sind. Alternativ können Sie vier Teile angeben :-L cbind:cport:shost:sport
. Wenn-L cport:cIP:sport
dies funktionieren würde, würde der Datenverkehr vom Client zum Server verschlüsselt und dann direkt an den Client zurückgesendet, wodurch die beabsichtigte Sicherheit zerstört würde.Antworten:
Der Befehl:
ssh
Dies würde dazu führen, dass der lokale Prozess an den 0.0.0.0-Port 5115 gebunden wird, um auf die Weiterleitung von Verbindungen zu warten. Die Fehlermeldung, die Sie erhalten, zeigt an, dass ein anderer Prozess bereits an diese Adresse und diesen Port gebunden ist und daherssh
nicht ausgeführt werden kann.Sie sollten dies überprüfen können, indem Sie netstat ausführen:
Möglicherweise sehen Sie eine Zeile wie diese:
"HÖREN" bedeutet, dass etwas auf Verbindungen wartet. " .22" ist die Adresse und der Port; 0.0.0.0 oder " " bedeutet "jede Schnittstelle".
Hier haben Sie die Möglichkeit, das andere Programm zu finden, das Port 5115 verwendet, und es anzuhalten, oder einen anderen lokalen Port für Ihren SSH-Tunnel zu verwenden.
quelle
I get this message no matter what ports I choose.
Wenn Sie Linux ausführen, können Sie die Warnung löschen, indem Sie Folgendes ausführen (als Root):
Was los ist, ist, dass ssh einen PF_INET6-Socket
[::]:5115
bindet , bevor es einen PF_INET-Socket bindet0.0.0.0:5115
. Der PF_INET6-Socket ist an beide Protokolle gebunden, sodass der Versuch, den zweiten Socket zu binden, fehlschlägt. Durch Einschaltenbindv6only
halten Sie die Hände des PF_INET6-Sockets von der IPv4-Adresse fern.Eine weniger störende Möglichkeit, dorthin zu gelangen, ist die Verwendung der Vier-Argumente-Form von
-L
, bei der Sie die Bindungsadresse explizit angeben (Verwendung0.0.0.0
).quelle