Windows 10 Linux Subsystem SSH-Client Ressource vorübergehend nicht verfügbar


24

Ich versuche, in meinen Remote-Server innerhalb des Windows 10 Linux-Subsystems zu sshen. Ich verwende MS Windows 10 Home Insider Preview Build 14366.

Während ich mich an der Eingabeaufforderung befinde, gebe ich Folgendes ein:

ssh user@domain.com

Einige Sekunden nach der Eingabe des Befehls ssh wird die folgende Meldung angezeigt:

ssh: Verbindung zum Host domain.com Port 22: Ressource vorübergehend nicht verfügbar

Ich kann mich erfolgreich sowohl mit Putty als auch mit ssh in Git Bash verbinden.

Das lässt mich glauben, dass das Problem auf meinem lokalen PC und insbesondere im Linux-Subsystem liegt. Ich bin immer noch sehr grün mit der Linux-Umgebung und weiß nicht, wie ich diese Meldung interpretieren soll. Welche Ressource ist nicht verfügbar und wie kann ich sie verfügbar machen?


Erste Vermutung: Windows Firewall? ps> und willkommen bei superuser :) Google scheint ein wenig mit fork zu tun zu haben. Bitte bearbeiten den Pfosten , und fügen Sie die Befehlszeile , die Sie diesen Fehler geben.
Hastur


Sie müssen nur überprüfen, ob Sie einen Insider Preview-Build von Windows 10 verwenden, da AFAIK, das Linux-Subsystem, nur in dieser Version und nicht unter "normalem" Windows 10 verfügbar ist. Andernfalls verwenden Sie möglicherweise Cygwin?
Gogoud

@ggoud - Ich habe die Frage so aktualisiert, dass sie das Betriebssystem enthält. Es ist in der Tat der Insider Preview Build.
Kell

2
Ich habe auch dieses Problem. Es betrifft alle von ssh unterstützten Programme, wie z. B. gitandapt-get
scicalculator

Antworten:


9

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 ncund telnetauf 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 ProxyCommandOption 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 ProxyCommandfü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 ProxyCommandGeschenk ü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), ProxyCommandignorieren SSH-Sitzungen, für die ein erforderlich ist, den anderen ProxyCommandund versuchen stattdessen, die Adresse des Hosts aufzulösen und eine Verbindung herzustellen direkt mit Netcat.


Danke für das Detail @ computergeek125. Leider erhalte ich auch nach dem Einrichten der vorgeschlagenen Konfiguration immer noch die Meldung ssh: connect to host domain.com Port 22: Ressource vorübergehend nicht verfügbar Wenn ich nc -v <Host> <Port> für eine ausführliche Ausgabe ausführe, erhalte ich die folgende Meldung der gleiche Fehler: Ressource vorübergehend nicht verfügbar. Ich kann etwas falsch machen, nicht sicher. Da ich mit der Git-Bash-Shell keine SSH-Probleme habe, bleibe ich vorerst dabei. Übrigens, mein System befindet sich jetzt in Build 14393. Wenn dies also ein Fehler in der Version zum Zeitpunkt der Frage war, ist es immer noch ein Fehler, den 27 später baut.
kell

Das ist interessant. Ich muss etwas über diesen Build recherchieren. Ich habe zu der Zeit 14903 ausgeführt (ich bin jetzt bis zu 14905). Es kann etwas sein, das sie in meinem Build behoben haben.
Computergeek125

Wie bearbeite ich die SSH-Konfiguration? In der Bash für Windows-Konsole habe ich versucht vi ~/.ssh/config, eine leere Datei zu öffnen. Ich habe deine Befehle eingefügt, aber wenn ich versuche zu speichern (esc ->: -> wq), wird mir gesagt"~/.ssh/config" E212: Cannot open file for writing
Dan

Ok, das ist komisch. Welche Windows-Version verwenden Sie und wie wird sie ausgegeben ls -al ~/.ssh?
Computergeek125

3

Dies war auch ein Problem für mich. Es stellte sich heraus, dass meine (Symantec) Firewall den gesamten Internet-Datenverkehr von Bash blockierte.

Es scheint ein allgemeines Problem mit Firewall-Anbietern von Drittanbietern zu sein, die den Prozess nicht erkennen:

https://github.com/Microsoft/BashOnWindows/issues/809

Als ich meine Firewall deaktiviert habe, hat es einwandfrei funktioniert. Kann im Moment keine bessere Lösung finden.



0

Wenn Sie Nginx in Zukunft installieren, wird SSH standardmäßig mit der Fehlermeldung "Ressource vorübergehend nicht verfügbar" blockiert, es sei denn, Sie ...

sudo ufw erlaube ssh


Windows 10 selbst hat eine Firewall. Warum hast du das vorgeschlagen?
Biswapriyo

Ich schlage vor, dass für zukünftige Benutzer mit den gleichen Problemen, weil ich genau das gleiche Problem hatte und weil Nginx SSH auf dem Server blockierte
andrerpena
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.