Windows 2019 per SSH fernsteuern

Wer einen Linux-Server fernsteuert, nutzt in den meisten Fällen SSH zur sicheren Kommunikation. Unter Windows war dies bis zuletzt nur durch Installation zusätzlicher Software möglich. Windows 10 und Windows Server 2019 bringen jedoch in der jeweils aktuellsten Ausgabe Unterstützung für SSH von Hause aus mit. Dieser Blog-Artikel zeigt Euch, wie Ihr SSH unter Windows nutzen könnt.

Einführung

Secure Shell (SSH) ist ein Netzwerkprotokoll zum sicheren Fernsteuern von Netzwerkdiensten über ein unsicheres Netzwerk (z.B. das Internet). Typische Applikationen, die SSH unterstützen, sind Kommandozeilenwerkzeuge (z.B. Putty) sowie spezielle Administrationswerkzeuge (z.B. pgAdmin). SSH ist für viele Administratoren der präferierte Weg zum Fernsteuern von Linux-Computern. Da ein Linux-Server in der Regel keine GUI besitzt, muss mit der Kommandozeile gearbeitet werden, SSH verlagert die Eingabe und Ausgabe dabei auf Deinen lokalen Rechner.

Seit dem April 2018-Update von Windows 10 (Version 1803) kann per Kommandozeile eine SSH-Verbindung zu einem entfernten SSH-Server aufgebaut werden. Parallel zu Windows 10 hat auch der Windows Server 2019 einen SSH-Serverdienst spendiert bekommen, so dass eine Fernwartung in einer modernen Windows-Umgebung komplett per SSH erfolgen kann.

Windows 10 bzw. 2019 nutzen OpenSSH als Software-Bibliothek. Dies erlaubt z.B. auch den Zugriff von Windows 10 auf einen Linux-Server per SSH.

OpenSSH-Server unter Windows 2019

Zunächst prüfen wir, ob der OpenSSH-Server vielleicht schon installiert ist. Öffne dazu die PowerShell-Konsole als Administrator und tippe folgendes ein:

Get-WindowsCapability -Online | ? name -like *OpenSSH.Server*

Lautet die Anwort wie folgt, dann ist der OpenSSH-Server installiert.

Name  : OpenSSH.Server~~~~0.0.1.0
State : Installed

Ist der OpenSSH-Server noch nicht installiert, dann lautet die Antwort:

Name  : OpenSSH.Server~~~~0.0.1.0
State : NotPresent

Standardmäßig ist der OpenSSH-Server unter Windows Server 2019 nicht installiert. Das lässt sich jedoch schnell nachholen. Tippe folgenden PowerShell-Befehl ein:

Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

Windows Server 2019 installiert nun den OpenSSH-Server als Windows-Dienst. Damit dieser bei jedem Neustart des Servers automatisch mitgestartet wird, tippe folgenden PowerShell-Befehl ein:

Set-Service sshd -StartupType Automatic

Um den OpenSSH-Server unmittelbar zu starten, tippe den folgenden PowerShell-Befehl ein:

Start-Service sshd

Noch ein letzter PowerShell-Befehl:

Get-ChildItem c:\ProgrammData\ssh\ssh_host_*_key | ForEach-Object { ssh-keygen -l -f $_ }

Dir werden jetzt alle öffentlichen Key Fingerprints (Schlüssel-Fingerabdrücke) des OpenSSH-Servers aufgelistet.

Beim Erstzugriff eines OpenSSH-Clients wird Dir ebenfalls ein Key Fingerprint angezeigt, und Du wirst gefragt, ob es sich beim angefragten Computer auch wirklich um den gewünschten SSH-Server handelt. Um diese Frage zu beantworten, muss der ausgewiesene Key Fingerprint mit einem der hier aufgelisteten Key Fingerprints übereinstimmen.

Dein Windows Server 2019 ist jetzt bereit und kann auf SSH-Anfragen antworten. Bitte achte darauf, dass bei Einsatz einer externen Firewall der TCP-Port 22 freigeschaltet ist. Die Windows-Firewall wird automatisch konfiguriert.

OpenSSH-Client unter Windows 10

Der OpenSSH-Client unter Windows 10 (ab Version 1803) ist standardmäßig installiert und kann sofort genutzt werden. Genau das machen wir jetzt auch und versuchen unseren soeben konfigurierten Windows Server per SSH zu erreichen.

Wir gehen dabei von folgender Konfiguration aus (alles nur Beispieldaten, die es real so nicht gibt):

Server:

  • DNS-Name: host1.beispiel.de
  • Benutzername des Administrators: colibri

Client:

  • DNS-Name: localhost1
  • Benutzername: frank

Authentifizierung mit Kennwort

Öffne auf Deinem Windows 10-Rechner die Windows-Kommandozeile und tippe folgendes ein:

ssh colibri@host1.beispiel.de

Beim ersten Start wird der Key Fingerprint des Servers angezeigt, und Du wirst gefragt, ob Du dich wirklich mit diesem Server verbinden möchtest.

The authenticity of host 'host1.beispiel.de (159.69.60.4)' can't be established.
ECDSA key fingerprint is SHA256:CxIuAEc3SZThY9XobrjJIHN61OTItAU0Emz0v/+15wY.
Are you sure you want to continue connecting (yes/no)?

Du solltest zunächst überprüfen, ob der angezeigte Key Fingerprint auch wirklich von Deinem Server stammt (siehe vorherigen Abschnitt). Bestätige anschließend mit yes und der Server wird in die lokale Liste der bekannten Rechner eingetragen. Diese Abfrage siehst Du nur beim aller ersten Zugriff auf Deinen Windows Server.

Anschließend wirst Du nach dem Kennwort des Benutzers colibri auf dem Server host1.beispiel.de gefragt. Tippe es ein und Du hast Fernzugriff auf Deinen Server.

Der OpenSSH-Client speichert die Liste der bekannten Rechner (Known Hosts) in einer Textdatei. Du kannst Sie Dir mit folgendem Befehl anzeigen lassen:

notepad "%USERPROFILE%\.ssh\known_hosts"

Authentifizierung mit SSH-Schlüssel

Hierbei musst Du einmalig ein Schlüsselpaar mit einem privaten und einem öffentlichen Schlüssel generieren. Der öffentliche Schlüssel wird auf dem SSH-Server hinterlegt, der private Schlüssel bleibt auf Deinem lokalen Rechner. Die Authentifizierung erfolgt nun durch das Versenden eines mit dem öffentlichen Schlüssel kodierten Datenpakets vom SSH-Server zum SSH-Client, der dieses mit seinem privaten Schlüssel wieder dekodieren muss. Ist die Dekodierung erfolgreich, bist Du authentifiziert.

Ein Schlüsselpaar erzeugen

Öffne auf Deinem Windows 10-Rechner die Windows-Kommandozeile und tippe folgendes ein:

cd %USERPROFILE%\.ssh\
ssh-keygen -t ed25519

Du bekommst folgende Meldung angezeigt:

Generating public/private ed25519 key pair.
Enter file in which to save the key (C:\Users\frank/.ssh/id_ed25519):

Bestätige mit der Eingabetaste.

Jetzt wirst Du gefragt, ob Du ein Kennwort zum Absichern Deines privaten Schlüssels definieren möchtest. Dies ist dringend zu empfehlen.

Enter passphrase (empty for no passphrase):

Das einmal eingegebene Kennwort musst Du zur Sicherheit noch einmal wiederholen:

Enter same passphrase again:

Jetzt wird ein neues Schlüsselpaar generiert und ein Meldung wie diese erscheint in Deiner Kommandozeile:

Your identification has been saved in C:\Users\frank/.ssh/id_ed25519.
Your public key has been saved in C:\Users\frank/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:7KMZvJiITZ+HbOyqjNPV5AeC5As2GSZES5baxy1NIe4 localhost1@Frank
The key's randomart image is:
+--[ED25519 256]--+
|E   ..o=*o.+o    |
|.   .oo+oo...    |
|....  o=..       |
| o+. o  =        |
|o .oo ooS.       |
|* ...+o oo       |
|oo.. o+o+o       |
| .   o+o+o       |
|      .o..       |
+----[SHA256]-----+

Die Meldung bedeutet, dass in der Datei C:\Users\frank\.ssh\id_ed25519 der private Schlüssel und in der Datei C:\Users\frank\.ssh\id_ed25519.pub der öffentliche Schlüssel gespeichert wurde.

Anmerkung: Wir haben hier bewusst einen Ed25519-Schlüssel erzeugt. Dieser wird momentan als sicherster Schlüsseltyp für OpenSSH empfohlen. Standardmäßig (also ohne Type-Option) erzeugt ssh-keygen einen RSA-Schlüssel.

Den öffentlichen Schlüssel verteilen

Der private Schlüssel ist privat und darf unter keinen Umständen veröffentlicht werden. Der öffentliche Schlüssel muss jedoch dem Windows Server bekanntgemacht werden. Dazu musst Du die Datei

C:\Users\frank\.ssh\id_ed25519.pub

von Deinem lokalen Windows 10-Computer kopieren und auf dem Windows Server unter dem neuen Pfad

C:\Users\colibri\.ssh\authorized_keys

ablegen (Achtung: Zieldatei hat keine Dateiendung). Existiert das Verzeichnis C:\Users\colibri\.ssh nicht, musst Du es zunächst anlegen:

New-Item -ItemType directory -Path C:\Users\colibri\.ssh

Jetzt müssen wir noch den OpenSSH-Server auf Deinem Windows Server konfigurieren. Öffne dazu die folgende Datei in einem Texteditor Deiner Wahl:

C:\ProgrammData\ssh\sshd_config

Ändere dort die folgenden Zeilen

Match Group administrators
      AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

ab in

# Match Group administrators
#       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

Bei einer Authentifizierung per SSH-Schlüssel sollte die Authentifizierung per Kennwort unterbunden werden. Andernfalls läuft der sicherheitstechnische Vorteil des SSH-Schlüssels ins Leere. Daher ändere auch die Zeile

# PasswordAuthentication yes

ab in

PasswordAuthentication no

Speichere die Konfigurationsdatei und starte den OpenSSH-Serverdienst neu. Tippe dazu in der PowerShell-Konsole folgenden Befehl ein:

Restart-Service sshd

Anmerkung: Die meisten Tutorials beschreiben den Einsatz des PowerShell-Moduls OpenSSHUtils, um die Zugriffsrechte des OpenSSH-Serverdienstes auf die Datei authorized_keys anzupassen. Das ist nicht nötig bzw. kann zu Problemen führen. Eine ausführliche Diskussion findest Du in diesem GitHub-Issue.

Testen

Öffne auf Deinem Windows 10-Rechner die Windows-Kommandozeile und tippe folgendes ein:

ssh colibri@host1.beispiel.de

Du wirst nun nach dem Kennwort Deines privaten Schlüssels gefragt.

Enter passphrase for key 'C:\Users\frank/.ssh/id_ed25519':

Tippe es ein, und Du hast Fernzugriff auf Deinen Server.

Kennwort oder SSH Schlüssel?

Die meisten Tutorials empfehlen den SSH-Schlüssel als sicherste Alternative. Bei dieser Methode verlässt der SSH-Schlüssel nicht Deinen Rechner, kann also weder abgefangen noch durch einen Brute-Force-Angriff erraten werden. Dies setzt allerdings voraus, dass Dein Client-Computer abgesichert ist und auch bei einem Diebstahl nicht sofort geknackt werden kann, denn der private SSH-Schlüssel ist dort dauerhaft gespeichert. Es wird daher dringend empfohlen, den privaten SSH-Schlüssel mit einem starken Kennwort zu schützen.

Fazit

OpenSSH unter Windows 10 bzw. Windows Server 2019 ist eine prima Sache. Dieser Blog-Artikel hat hoffentlich Lust gemacht, mit OpenSSH unter Windows zu experimentieren. Er deckt aber bei weitem nicht alle Aspekte von OpenSSH ab. So kann beispielsweise auch mit PowerShell Core über SSH kommuniziert werden. Auch habe ich die Nützlichkeit des Werkzeugs ssh-agent aus Gründen der Kompaktheit unterschlagen.

Das könnte dich auch interessieren:
  1. TLS unter IIS 10 absichern
  2. HTTPS unter IIS 10
  3. Windows 10 wiederherstellen
Teile diesen Artikel
comments powered by Disqus