OpenSSH unter Windows nutzen

Microsoft hat mit dem Windows 10 Fall Creators Update neben dem bereits länger verfügbarem Linux Subsystem nun auch einen OpenSSH Server und Client hinzugefügt. Aktuell befinden sich die Features noch im Beta Status. Dadurch werden gewisse Funktionalitäten noch nicht gegeben sein. Um die beiden neuen Features nutzen zu können, müssen diese erst aktiviert werden. Dies kann entweder über die Windows Feature Verwaltung oder über die Kommandozeile geschehen. Die folgende Befehle aktivieren den OpenSSH Server und Client auf einem Windows 10 Host.

Alle folgenden Befehle werden in einer PowerShell Konsole ausgeführt.

dism /online /Add-Capability /CapabilityName:OpenSSH.Server~~~~0.0.1.0
dism /online /Add-Capability /CapabilityName:OpenSSH.Client~~~~0.0.1.0

Windows 10 OpenSSH Server Client ssh

Je nach Versionsstand, kann die Versionsnummer unterschiedlich sein. Um auf der sicheren Seite zu sein, kann diese im Vorfeld abgefragt werden.

dism /online /get-capabilities | findstr /i "OpenSSH.Client"

Typisch für Windows muss auch eine so kleine Änderung mit einem Neustart finalisiert werden. Nach dem Neustart ist dann auch ein neuer Dienst für den SSH Server (sshd) und einer für den SSH Client (sshd-agend) vorhanden.

Windows 10 OpenSSH Server Client ssh

Die Konfiguration von OpenSSH kann über die Datei „C:\Windows\System32\OpenSSH\sshd_config“ erledigt werden. Linux Anwender finden sich hier sicher schnell zurecht. Im Internet gibt es viele gute Anleitungen, welche die Konfiguration der „sshd_config“ beschreiben.
Nach einer Anpassung muss der Dienst „ssh-agent“ neu gestartet werden. Um sich nun per SSH auf eine entfernte Maschine zu verbinden kann folgender Befehl ausgeführt werden.

ssh benutzer@rechnername

Hierbei wird sich per Passwort authentifiziert. Um sich über einen SSH Schlüssel mit dem Zielsystem zu verbinden, muss der private Schlüssel erst auf dem Windows Host hinterlegt werden. Dieser wird unter „C:\Windows\System32\OpenSSH\id_rsa“ abgelegt. Da es sich um den privaten Schlüssel handelt, muss dieser abgesichert werden. Dazu werden die Berechtigungen entsprechend neu gesetzt. Um alle nicht benötigten Berechtigungen zu entfernen, wird der aktuelle Status ausgelesen.

icacls.exe .\id_rsa

Alle Berechtigungen außer für „SYSTEM“ und „Administratoren“ werden entfernt. Um eine nachträgliche Vererbung von Berechtigungen zu verhindern, wird diese deaktiviert.

icacls.exe .\id_rsa /inheritance:d

Dann wird „SYSTEM“ zum Besitzer des Schlüssels gemacht.

icacls.exe .\id_rsa /setowner system

Zum Schluss werden noch alle weiteren Benutzer entfernt.

icacls.exe .\id_rsa /remove Benutzer

Jetzt kann die SSH Sitzung über einen Schlüssel aufgebaut werden.

ssh -i .\id_rsa benutzer@rechnername

Um von einem anderem Rechner per SSH auf den Windows Host zugreifen zu können, muss der öffentliche Schlüssel auf dem Windows Rechner abgelegt werden. Die öffentlichen Schlüssel liegen im eigenen Benutzerprofil. Dazu wird das benötigte Verzeichnis angelegt.

mkdir -Path $env:userprofile\.ssh

Der Inhalt des öffentlichen Schlüssels wird in der Datei „authorized_keys“ eingefügt, die neu erstellt werden muss. Damit die Datei abgesichert wird, müssen auch hier die Berechtigungen neu gesetzt werden. Dazu wird wieder zuerst die aktuelle Berechtigungsvergabe ausgelesen.

icacls $env:userprofile\.ssh\authorized_keys

Die Berechtigungen für „SYSTEM“ und „Administratoren“ bleiben bestehen. Alle anderen Berechtigungen werden entfernt bzw. neu gesetzt. Der folgende Wert „Benutzer“ muss hierbei angepasst werden. Sollten noch weitere Benutzer in der Berechtigung auftauchen, müssen diese ebenfalls entfernt werden.

icacls $env:userprofile\.ssh\authorized_keys /inheritance:d
icacls $env:userprofile\.ssh\authorized_keys /remove Benutzer
icacls $env:userprofile\.ssh\authorized_keys /remove `"NT SERVICE\sshd`"
icacls $env:userprofile\.ssh\authorized_keys /grant `"NT SERVICE\sshd`":`(R`)

Windows 10 OpenSSH Server Client ssh

Nun lässt sich auch eine ssh Verbindung auf den eigenen Windows Rechner aufbauen. In meinen ersten Tests hat der Verbindungsaufbau auf einen anderen Rechner nicht funktioniert, wenn der private Schlüssel ausserhalb von „C:\Windows\System32\OpenSSH“ lag. Das mag aktuell noch am Beta Status liegen. Solange hier keine finale Version verfügbar ist, empfiehlt sich, auf Alternativen auszuweichen, die sich durchaus etabliert haben. Eine gute Alternative bietet PuTTY. Der Einsatz von PuTTY unter Windows ist hier beschrieben. https://blog.doenselmann.com/putty-ssh-client-konfigurieren/