Soweit ich das beurteilen kann, ist dies ein Fehler in der WSL. Hoffentlich wird Microsoft das Problem im nächsten Build beheben. Aber jetzt können wir diesen etwas hässlichen Hack verwenden.
Update Nr. 1 : Auf jeden Fall ein Fehler. Fand dieses Problem auf Github. Ihre vorgeschlagene Problemumgehung für den Neustart der Shell funktioniert auch für mich, wenn Sie all dies nicht durchgehen möchten.
TL; DR Fügen Sie dies zum ENDE Ihrer SSH-Konfiguration hinzu (normalerweise unter ~/.ssh/config
):
Host *
ProxyCommand nc %h %p %r
Hier ist, warum es funktioniert: Unser SSH-Problem ist kein Firewall-Problem, da nc
und telnet
auf demselben Host und Port (versuchen Sie telnet <host> <port>
oder nc <host> <port>
: Sie sollten so etwas sehen SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.7
). Dies können wir zu unserem Vorteil nutzen.
SSH ermöglicht die Verwendung von Proxys, die Standardeingaben verwenden und diese über die ProxyCommand
Option an den Port des Servers senden . Dies wird normalerweise zum Tunneln von Netzwerken zu einem geschützten Host mithilfe eines SSH-Servers zwischen den Bastionen verwendet, der auch als Sprunghost bezeichnet wird ( weitere Informationen finden Sie unter diesem Link ).
Dieser Hack weist SSH an, einen Proxy ohne Jump-Hosts zu verwenden. Daher wird die fehlgeschlagene Zuweisung von TCP-Ressourcen durch SSH umgangen, indem die gesamte Zuweisung von Netzwerkressourcen auf Netcat übertragen wird, was funktioniert. SSH erledigt sein SSH-Ding nur ohne Netzwerkverbindungen, und Netcat sendet die Rohdaten über eine TCP-Verbindung an den SSH-Server.
WARNUNG: Da dies das ProxyCommand
für alle Hosts ändert , weiß ich nicht, wie es mit anderen SSH-Konfigurationshosts interagiert, die es verwenden ProxyCommand
. Ich habe ein paar Server, mit denen ich das testen kann, und ich werde diese Antwort mit den Ergebnissen aktualisieren. Es besteht die Möglichkeit, dass es keine schädlichen Nebenwirkungen gibt, aber das kann ich nicht garantieren.
Update Nr. 2: Ich habe einige Tests mit einigen meiner Server durchgeführt, und dies scheint zu funktionieren. SSH verwendet den obersten Eintrag in der Konfiguration, wenn mehrere Einträge zutreffen. Ein existierendes ProxyCommand
Geschenk über diesem Hack würde ihn also überschreiben. Wenn der neue SSH-Befehl ausgeführt wird, liest er die SSH-Konfiguration erneut, und wenn es keine andere gibt ProxyCommand
, verwendet SSH unseren Hack ProxyCommand
, sodass er nur auf die "äußerste" SSH-Sitzung angewendet werden kann. Warnung: Wenn Sie den Hack am Anfang der Konfigurationsdatei platzieren (oder über dem Eintrag, zu dem Sie versuchen, eine SSH-Verbindung herzustellen), ProxyCommand
ignorieren SSH-Sitzungen, für die ein erforderlich ist, den anderen ProxyCommand
und versuchen stattdessen, die Adresse des Hosts aufzulösen und eine Verbindung herzustellen direkt mit Netcat.