Wie kann ich SSH in "Bash unter Ubuntu unter Windows 10"?

99

Ich habe Windows 10 Anniversary Edition mit "Bash on Ubuntu on Windows" installiert und arbeite. Ich möchte SSH in diese Ubuntu-Instanz einbinden können, aber obwohl ich openssh-server installiert und konfiguriert habe (und Port 2200 abhöre), wird mir beim Versuch, ssh auf "localhost: 2200" zu setzen, unerwartet "Server" angezeigt geschlossene Netzwerkverbindung ".

Hat jemand dies erfolgreich geschafft?

Bildbeschreibung hier eingeben

Mick
quelle
Wenn Sie Process Hacker verwenden und die Registerkarte "Netzwerk" aufrufen, wird angezeigt, dass sshd (unter Ubuntu unter Windows 10 ausgeführt) den lokalen Port 2200 überwacht.
Mick
und wenn Sie versuchen, eine Verbindung zur IP-Adresse des Systems herzustellen? Ubuntu ordnet Loopback-Adressen häufig anders zu als Windows und verwendet zusätzliche Werte in 127.0.0.0/8 (häufig 127.0.1.1)
Frank Thomas
@ Ramhound: Nicht wahr. Localhost ist localhost und alles wird geteilt. Sie können dies problemlos links http://localhost/vom Linux-Subsystem aus tun und die von IIS auf Windows-Seite bereitgestellte Webseite anzeigen. Es gibt keine Trennung.
Sami Kuhmonen

Antworten:

120

Ich habe es zum Arbeiten gebracht; hier ist wie.

Deinstalliere ssh-server, installiere es neu und stelle sicher, dass es gestartet wird

sudo service ssh --full-restart

Stellen Sie sicher, dass Sie den Root-Zugriff deaktiviert und der Konfigurationsdatei einen anderen Benutzer hinzugefügt haben.

Ich konnte auf 127.0.0.1:22 wie erwartet eine Verbindung zum Subsystem herstellen. Ich hoffe, dies wird dir helfen.

Hier ist ein Screenshot.

  1. sudo apt-get purge openssh-server
  2. sudo apt-get install openssh-server
  3. sudo nano /etc/ssh/sshd_config und Root-Anmeldung durch Einstellung nicht zulassen PermitRootLogin no
  4. Fügen Sie dann eine Zeile darunter hinzu, die besagt:

    AllowUsers yourusername

    und stellen Sie sicher, dass auf festgelegt PasswordAuthenticationist, yeswenn Sie sich mit einem Kennwort anmelden möchten.

  5. Deaktivieren Sie die Trennung von Berechtigungen, indem Sie Folgendes hinzufügen / ändern: UsePrivilegeSeparation no

  6. sudo service ssh --full-restart

  7. Stellen Sie unter Windows mit einem ssh-Client wie PuTTY eine Verbindung zu Ihrem Linux-Subsystem her.

Meister Azazel
quelle
2
Ich musste das nicht tun - seltsam ... aber denken Sie daran, dass dies noch in der Beta-Phase ist, sodass die Ergebnisse variieren können
Meister Azazel
7
Außerdem musste ich: Windows 10 SSH Server Broker Services über die Systemsteuerung der Dienste anhalten
deaktivieren
6
Ich musste auch eine Firewall-Regel hinzufügen. Es gab eine Regel, die jedoch nur für den Windows SSH-Server-Proxy galt. Als ich diesen Dienst stoppte, blockierte die Firewall den Datenverkehr auf Port 22.
Pierre-Luc Paour,
2
Ich musste auch die Ports ( Port 2222in der /etc/ssh/sshd_configDatei) ändern , wenn nicht der SSH-Server von Windows die Verbindung auf Port 22 aufnahm.
Arod
2
@ArtemRussakovskii sie stoppen das gesamte Linux-Subsystem, wenn Sie das Bash-Fenster schließen ...
Sakher
27

Da die Windows-Implementierung kein Chroot bietet, müssen Sie die Datei / etc / ssh / sshd_config ändern

UsePrivilegeSeparation no

Außerdem müssen Sie einen Benutzer mit dem Befehl useradd erstellen.

d1val
quelle
4
Dieser Schritt war wichtig, um es zum Laufen zu bringen.
Mick
1
Ich war neugierig und fand dies unter freebsd.org/cgi/man.cgi?sshd_config(5) : UsePrivilegeSeparation:
krs013
Gibt an, ob sshd (8) Berechtigungen durch Erstellen eines nicht privilegierten untergeordneten Prozesses für den Umgang mit eingehendem Netzwerkverkehr trennt. Nach erfolgreicher Authentifizierung wird ein weiterer Prozess erstellt, der die Berechtigung des authentifizierten Benutzers besitzt. Das Ziel der Privilegientrennung besteht darin, die Eskalation von Privilegien zu verhindern, indem Korruption in den nicht privilegierten Prozessen unterbunden wird. Das Argument muss "yes", "no" oder "sandbox" sein. Wenn UsePrivilegeSeparation auf "Sandbox" festgelegt ist, unterliegt der nichtprivilegierte Vorauthentifizierungsprozess zusätzlichen Einschränkungen. Die Standardeinstellung ist "Sandbox".
krs013
7
Die WSL hat chroot im September 2016 implementiert (nach dieser Antwort).
GreenReaper
24

Die By-Committee-Antworten oben waren großartig. Danke für sie. Und während sie sehr nahe kamen, hatte ich immer noch Probleme mit Connection mit 127.0.0.1 .

Ich habe in diesem Beitrag zusätzliche Schritte gefunden und hinzugefügt, die mich über den Berg gebracht haben. Insbesondere das erneute Beginnen und Hinzufügen als erster / erster Schritt (beachten Sie das Qualifikationsmerkmal --purge ) löste schließlich meine Variation dieses Problems:

sudo apt-get remove --purge openssh-server
sudo apt-get install openssh-server
sudo vi /etc/ssh/sshd_config # Change Port from 22 to 2222 (Just in case MS-Windows is using port 22; which, by the way, SSH on MS-Windows can be disabled if you want to use port 22).
sudo service ssh --full-restart

Nochmals vielen Dank, ich hoffe, dieser Zusatz hilft anderen. = :)

NYCeyes
quelle
2
Warum die Gegenstimme? Diese Anweisungen allein haben in meinem Fall, wie bereits erwähnt, nicht funktioniert, und der obige zusätzliche Schritt hat funktioniert. Ich verstehe es nicht.
NYCeyes
1
Ich hatte einen ganz anderen Fehler "Keine unterstützten Authentifizierungsmethoden verfügbar (Server gesendet: publickey)" und diese Schritte haben ihn behoben.
Mike Viens
2
Aus irgendeinem Grund wusste Windows einfach nicht, dass ich auf Port 2222 lief. Es wurden keine anderen Prozesse angezeigt, die es verwendeten, und es gab keine Hinweise auf einen Portkonflikt, aber sobald ich die Ports wechselte, begann es Arbeit.
Forresthopkinsa
Port 2222 funktioniert auch bei mir nicht, kein anderer Dienst läuft, aber 22 funktioniert, was ein Problem ist, da ich mehrere SSH-Verbindungen haben möchte.
mFeinstein
4

Ich habe alles getan, wie es Meister Azazel vorgeschlagen hatte und hatte das Problem. Als ich mich mit dem Port verbunden 22habe, wurde ich nach einem Passwort gefragt, aber das Passwort, das ich im Linux-Subsystem festgelegt habe, funktionierte nicht.

Lösung 1:
Ändern Sie den SSH-Port /etc/ssh/sshd_configund starten Sie den SSH-Server im Subsystem neu

Lösung 2:
Deaktivieren / Stoppen Sie die "SSH Server Broker Services" in der Systemsteuerung von Windows und starten Sie den SSH-Server im Subsystem neu.

scotty86
quelle
1
Dies gilt nur, wenn Windows auf Port 22 ausgeführt wird.
Master Azazel,
3
Ofcz, wie Sie auf meiner Standardinstallation von win10 sehen, lief ein Dienst am 22. ...
scotty86
2

Der Grund, warum Sie nicht dazu ssh können, wird in der Protokollierung vom Server gezeigt:

chroot ("/ var / run / sshd"): Funktion nicht implementiert

Auf dem Linux-Subsystem scheint chroot nicht implementiert zu sein, und der ssh-Server benötigt es, sodass die Verbindung nicht zulässig ist.

Sami Kuhmonen
quelle
3
Was richtig ist, aber die anderen Antworten erklären, wie man die Chroot-Anforderung umgeht.
Mahmoud Al-Qudsi