OpenSSH unter Windows 10 aktivieren, PowerShell-Remoting nutzen

    OpenSSH als optionales Feature in Windows 10 1709 installierenMit der Por­tierung von Power­Shell Core auf Linux und MacOS stellt Microsoft für das Remoting auf SSH um. Windows 10 1709 enthält bereits Client und Server von OpenSSH als optionales Feature. Der SSH-Server ist nach seiner Akti­vierung jedoch nicht einsatz­bereit und muss erst manuell konfi­guriert werden.

    In der Vergangen­heit musste man für SSH unter Windows auf Tools wie PuTTY zurückgreifen, weil das Betriebs­system dafür keine Unter­stützung bot. Aber im Zuge der neuen Multiplattform-Strategie portierte Microsoft nicht nur PowerShell auf andere Systeme, sondern umgekehrt auch OpenSSH auf Windows.

    OpenSSH als optionales Feature in Windows 10

    Nachdem PowerShell Core 6.0 kurz vor seinem ersten offiziellen Release steht, nähert sich auch OpenSSH für Windows seiner Fertigstellung. In Windows 10 1709 ist es bereits als Feature enthalten, wenn auch als Beta.

    Möchte man OpenSSH installieren, dann wird man in der System­steuerung unter Programme => Windows-Features aktivieren oder deaktivieren vergeblich danach suchen. Auch das PowerShell-Cmdlet Get-WindowsOptionalFeature listet es nicht auf.

    OpenSSH als optionales Feature in Windows 10 1709

    Ausschließlich zuständig ist dafür die App Einstellungen, wo man unter Apps dem Link Optionale Features verwalten folgt. Dort klickt man auf Features hinzufügen und wählt hier je nach Bedarf OpenSSH Client bzw. OpenSSH Server aus. Auch wenn Windows anschließend nach keinem Neustart verlangt, so ist man gut beraten, den Rechner trotzdem neu zu booten.

    Unkomplizierter Client

    Der SSH-Client sollte sich nun problemlos nutzen lassen. Die Syntax entspricht jener der Linux-Version und lässt sich über den Aufruf von ssh.exe ohne Parameter anzeigen. Als normales Konsolen­programm steht es unter der Eingabeauf­forderung oder Windows PowerShell zur Verfügung.

    Der SSH-Client zeigt beim Aufruf ohne Parameter den Hilfetext für die Syntax an.

    Ganz und gar nicht so unkompliziert gestaltet sich die Inbetriebnahme des SSH-Servers. Dieser läuft als Service, dessen Starttyp als automatisch konfiguriert ist. Sieht man in services.msc nach, dann wird man schnell feststellen, dass sshd nicht läuft.

    Nach der Aktivierung des OpenSSH Servers als optionales Feature lässt sich der sshd-Dienst nicht starten.

    Startet man ihn manuell, dann erhält man Meldungen wie Fehler 1607: Der Prozess wurde unerwartet beendet.

    sshd konfigurieren

    Man kann sich nun dadurch behelfen, dass man sich an der Anleitung für die Installation von OpenSSH orientiert, das man als ZIP-Datei über Github bekommt. Diesen Download benötigt man nach wie vor für Windows Server, weil dort OpenSSH auch in der Version 1709 noch nicht verfügbar ist.

    Im ersten Schritt lädt man das aktuelle OpenSSH für Windows in der x86- oder x64-Version von Github herunter. Aus dem ZIP-Archiv entnimmt man die Dateien FixHost­File­Permissions.ps1, OpenSSH­Utils.psm1 und OpenSSh­Utils.psd1. Sie kopiert man in das OpenSSH-Verzeichnis unterhalb von %SystemRoot%\System32.

    Benötigte Dateien zur Beseitigung des Rechteproblems

    In einer PowerShell mit administrativen Berechtigungen führt man dann den Befehl

    .\FixHostFilePermissions.ps1 -Confirm:$false

    aus.

    Ausführung der FixHostFilePermissions.ps1 zur Anpassung der Dateirechte.

    Bevor man den SSH-Dienst startet, sind noch ein paar weitere Dinge zu erledigen. Dazu gehört die Anpassung der Datei sshd_config, die sich ebenfalls in diesem Verzeichnis befindet. Für sie muss man sich als Administrator erst die erforderlichen Schreib­rechte einräumen, bevor man folgende Schritte ausführt:

    Entfernen des Kommentarzeichens '#' am Beginn der Zeilen

    PubkeyAuthentication yes

    PasswordAuthentication yes

    und Hinzufügen des Eintrags

    Subsystem powershell c:/program files/powershell/6.0.0-rc/pwsh.exe -sshs -NoLogo -NoProfile

    Der Pfad muss natürlich auf das Verzeichnis verweisen, in dem man PowerShell Core tatsächlich installiert hat.

    Anpassung der Konfiguration für sshd

    Abschließend generiert man die Schlüssel für die Authentifizierung mit

    .\ssh-keygen.exe -A

    und öffnet den Port 22 in der Firewall:

    netsh advfirewall firewall add rule name=SSH dir=in action=allow protocol=TCP localport=22

    Nun sollte sich der SSH-Daemon mit

    net start sshd

    erfolgreich starten lassen.

    PowerShell-Remoting über SSH

    Möchte man sich nun von einem anderen Rechner mit diesem Host verbinden, dann kann man dies wie oben beschrieben über den Aufruf von ssh auf der Kommando­zeile tun. In diesem Fall landet man auf der Eingabeauf­forderung cmd.exe, wo man bei Bedarf auch Windows PowerShell starten kann.

    SSH-Verbindung von Ubuntu zu Windows 10 mit anschließendem Aufruf von Windows PowerShell.

    Interessanter ist indes die Möglichkeit, Remote-Sessions in PowerShell über SSH zu öffnen. Dies bleibt allerdings PowerShell Core vorbehalten, die man parallel zur mitge­lieferten Windows PowerShell installieren kann (Download von Github).

    Zuständig dafür sind die Cmdlets New-PSSession und Enter-PSSession, welche bisher Remote-Sessions nur über WinRM aufbauen konnten. Unter PowerShell Core erhielten sie für SSH einen neuen Parameter­satz.

    Anstatt mit ComputerName spezifiziert man den entfernten Rechner mit HostName, den Benutzernamen übergibt man nicht mit dem Parameter Credential, sondern mit UserName. Zusätzlich kann man den Schalter SSHTransport hinzufügen:

    Enter-PSSession -HostName WS2016-L1 -UserName contoso\hmeier -SSHTransport

    Starten einer Remote-PowerShell-Session auf Ubuntu von Windows 10 aus.

    Dieses Kommando funktioniert über Plattform­grenzen hinweg, so dass man auf diese Weise zum Beispiel einen Windows Server von einem Mac aus mittels PowerShell Core verwalten kann.

    2 Kommentare

    Bild von Wolfgang Gandre
    Wolfgang Gandre sagt:
    30. November 2017 - 13:38

    Leider funktioniert das Erstellen von key pairs mit ssh-keygen nicht. Es gibt immer eine Fehlermeldung mit Hinweis auf ein "invalid argument". Keine Ahnung, was damit gemeint ist. Wenn ich unter Linux ein key pair erstelle, wird dieser key unter Windows nicht korrekt erkannt. Hat das schon mal jemand ausprobiert?
    Gruß
    Wolfgang Gandre

    Bild von Wolfgang Sommergut
    30. November 2017 - 14:12

    Das ist ein bekannter Bug, der aber offenbar noch nicht behoben wurde (https://github.com/PowerShell...). Er tritt nur auf, wenn die Passphrase nicht leer ist. Workaround ist momentan dann wohl, diese leer zu lassen.