Eine der großartigen Veränderungen, die PowerShell in den letzten Jahren durchgemacht hat, besteht darin, dass sie viele Möglichkeiten bietet, um mit Nicht-Windows-Maschinen zu interagieren. Eine dieser Veränderungen war die Unterstützung von PSRemoting über SSH. PSRemoting über SSH bedeutet auch, PSRemoting unter Linux zu haben!
Obwohl die Einrichtung von PSRemoting für die Zusammenarbeit mit SSH und Linux etwas Vorbereitung erfordert, ermöglicht dies die Verwendung von PowerShell zur nativen Interaktion mit Linux-Maschinen.
In diesem Tutorial lernen Sie, wie Sie einen Windows-Client einrichten, um eine Verbindung zu einem Linux-Computer (CentOS) mit Hilfe von PSRemoting über SSH herzustellen und umgekehrt. Sie lernen, wie Sie sich sowohl mit einem Passwort als auch mit einem Zertifikat authentifizieren können.
Verwandt: PowerShell Remoting: Der ultimative Leitfaden
Voraussetzungen
In diesem Tutorial wird Schritt für Schritt vorgegangen. Wenn Sie mitmachen möchten, stellen Sie bitte sicher, dass Sie im Voraus über folgende Dinge verfügen:
- A Windows 10 build 1809 or greater machine. The tutorial will use Windows Server 2019 Standard as the remote server.
- A Linux machine that supports PowerShell 7. The tutorial will use CentOS 8.
- Sudo-Rechte auf der Linux-Maschine und lokale Administratorrechte auf der Windows-Maschine. Nach der anfänglichen Einrichtung können einige der Rechte entzogen werden.
Einrichten von Windows (Client) für PSRemoting über SSH
Zunächst müssen Sie den PSRemoting-Client (PowerShell) auf Ihrem Windows-Client konfigurieren. Dazu müssen Sie sowohl PowerShell 7+ als auch OpenSSH einrichten und konfigurieren.
Installieren von PowerShell 7+
Installieren Sie zunächst PowerShell 7+. In diesem Tutorial wird nicht erläutert, wie dies durchgeführt wird. Informationen dazu finden Sie im untenstehenden Link.
Installieren von OpenSSH
Sie müssen auch OpenSSH installieren. OpenSSH ist das Paket, das PSRemoting verwenden wird, um eine Verbindung zum entfernten Linux-Computer herzustellen. Sie können OpenSSH über PowerShell mit dem Befehl Get-WindowsCapability
wie unten gezeigt installieren.
Je nachdem, ob Ihr Windows-Host als Client und/oder Server fungieren soll, hängt davon ab, welche Windows-Funktion Sie installieren sollten. Wenn Sie von Ihrem Windows-Server zu Linux verbinden, benötigen Sie nur den OpenSSH-Client. Wenn Sie von Linux zum Windows-Server verbinden, benötigen Sie nur den OpenSSH-Server.
Der folgende Befehl findet alle Windows-Funktionen mit einem Namen, der mit OpenSSH beginnt, und installiert sie. Dadurch werden sowohl der Client als auch der Server installiert.
Wenn Sie nur den Client installieren möchten, ändern Sie den Filter im
Where-Object
-Skriptblock inOpenSSH.Client*
und für den Server sollte der FilterOpenSSH.Server*
sein.
Verwandt: Erste Schritte mit SSH und PowerShell
Starten des SSH-Servers
Nach der Installation von OpenSSH öffnet es die Windows-Firewall für den Port 22, startet aber den OpenSSH-Serverdienst nicht, um auf dem Port zu lauschen. Um den OpenSSH-Server auf Windows Server zu starten, führen Sie den folgenden PowerShell-Befehl aus, um den OpenSSH-Server zu starten und den Dienst so einzurichten, dass er beim Hochfahren gestartet wird.
Konfigurieren der OpenSSH-Konfiguration
Der nächste Schritt besteht darin, die Konfigurationsdatei des sshd_config-Daemons zu ändern. In dieser Datei müssen Sie zunächst bestätigen, dass die Passwortauthentifizierung aktiviert ist, und außerdem das PowerShell-Subsystem hinzufügen.
In diesem Teil des Tutorials wird die einfachste Methode zur Verwendung von Passwörtern eingerichtet. Später in diesem Tutorial lernen Sie, wie Sie die SSH-Authentifizierung mit Zertifikaten einrichten können.
- Öffnen Sie die Konfigurationsdatei in Ihrem bevorzugten Texteditor unter C:\ProgramData\ssh\sshd_config.
2. Bestätigen Sie, dass die Passwortauthentifizierung aktiviert ist, indem entweder die Zeile PasswordAuthentication mit einem #
am Anfang auskommentiert ist oder auf yes
gesetzt ist.

3. Fügen Sie das PowerShell-Subsystem hinzu. Für PowerShell 7 fügen Sie die Zeile hinzu: Subsystem powershell c:/progra~1/powershell/7/pwsh.exe -sshs -NoLogo
.
- Die Option
-sshs
wird verwendet, um PowerShell 7 als Subsystem innerhalb von SSH auszuführen. - Die Option
-NoLogo
bewirkt, dass PowerShell beim Starten die Urheberrechtsinformationen ausblendet, um sicherzustellen, dass beim Starten der SSH-Sitzung keine unerwarteten Ausgaben auftreten.
4. Speichern und schließen Sie die Konfigurationsdatei.
5. Starten Sie den sshd-Windows-Dienst neu. Sie können dies mit PowerShell durch Ausführen von Restart-Service sshd
tun.
Jetzt sollten alle erforderlichen Konfigurationen vorgenommen sein, um sich mit diesem Windows Server über PSRemoting über SSH zu verbinden.
Einrichten von Linux (Server) für PSRemoting über SSH
Als nächstes kommt Linux mit einer ähnlichen Einrichtung; Installation von PowerShell und Konfiguration von OpenSSH.
Beachten Sie, dass einige der Befehle für CentOS möglicherweise unterschiedlich sind, wenn Sie eine andere Distribution verwenden.
Installation von PowerShell 7+
Zuerst installieren Sie PowerShell 7. In diesem Tutorial wird nicht erklärt, wie dies gemacht wird. Stattdessen sollten Sie den folgenden Link überprüfen.
Verwandt: Wie man PowerShell 7 unter Windows, macOS und Linux herunterlädt und installiert
Konfiguration von OpenSSH
Wie beim Windows Server benötigen Sie OpenSSH. Im Gegensatz zu Windows ist OpenSSH wahrscheinlich bereits installiert. Bei diesem Tutorial mit CentOS 8 ist die Linux-Maschine standardmäßig mit sowohl dem Client als auch dem Server installiert, aber Sie können dies mit dem folgenden Befehl überprüfen:
Wenn der Client und der Server installiert sind, sollten Sie eine ähnliche Ausgabe wie unten erhalten.

Konfigurieren Sie die SSH-Konfigurationsdatei, indem Sie:
- Öffnen Sie die Datei sshd_config, indem Sie den Befehl
sudo vi /etc/ssh/sshd_config
ausführen.
2. Fügen Sie die PowerShell-Subsystemzeile genau wie beim Hinzufügen zum Windows Server in die Konfigurationsdatei ein.
3. Beenden Sie vi und speichern Sie die Datei.
4. Starten Sie den SSH-Daemon neu, um die Änderungen anzuwenden, indem Sie den Befehl sudo systemctl restart sshd
ausführen.
Standardmäßig sind in den meisten Fällen die Authentifizierung mit Passwort und Public Key aktiviert, einschließlich CentOS 8. Sie müssen diese hier nicht hinzufügen.
Eine Verbindung von Windows zu Linux und umgekehrt mit Passwortauthentifizierung herstellen
Nachdem Sie alles sowohl auf den Linux- als auch auf den Windows-Maschinen eingerichtet haben, ist es an der Zeit, die Arbeit, die Sie geleistet haben, sinnvoll einzusetzen. Versuchen wir nun, von Windows zu Linux und umgekehrt mit Passwortauthentifizierung eine Verbindung herzustellen.
Die passwortbasierte Authentifizierung sieht aus und fühlt sich an wie die Verwendung von SSH mit Benutzername und Passwort.
Verbindungsbefehle
Um die Verbindung mit PSRemoting über SSH von Windows zu Linux oder von Linux zu Windows zu testen, verwenden wir sowohl eine „ad-hoc“-Sitzung mit dem Befehl Invoke-Command
als auch eine persistente Sitzung mit dem Befehl New-PSSession
.
Verwandt: Invoke-Command: Der beste Weg, um Remote-Code auszuführen
Testen Sie die PSRemoting-Verbindung mit Invoke-Command
, indem Sie:
- Ihre PowerShell 7-Konsole öffnen.
2. Parameter für den Befehl Invoke-Command
festlegen. In diesem Fall stellen die unten aufgeführten Parameter eine Verbindung zu einem Computer namens SRV1 unter Verwendung eines lokalen Benutzerkontos auf SRV1 namens User her.
3. Invoke-Command
ausführen, indem Sie die oben genannten Parameter splitten und einen Befehl ausführen (in diesem Fall Get-Process
innerhalb eines Skriptblocks ausführen.
Verwandt: PowerShell Splatting: Was ist das und wie funktioniert es?
Dann sollten Sie eine Liste aller laufenden Prozesse auf dem Computer SRV1 sehen.
Sie können auch eine dauerhafte Verbindung herstellen, die es Ihnen ermöglicht, interaktiv Befehle auszuführen, indem Sie:
- die oben genannten Parameter bereitstellen und sie an das Cmdlet
New-PSSession
übergeben.
2. Interaktiv mit der Sitzung verbinden, indem Sie das Cmdlet Enter-PSSession
verwenden.
3. Nach Ausführung des Befehls Enter-PSSession
würden Sie zur Eingabe des Passworts für den Benutzer aufgefordert werden. Nach der Authentifizierung wären Sie mit der anderen Maschine innerhalb von PowerShell verbunden.
Beachten Sie, dass keiner der oben genannten Befehle den gängigen Parameter Credential
benötigt, um Benutzername und Passwort für die Verbindung anzugeben. Stattdessen haben wir den Parameter SSHTransport
verwendet. SSH verwendet nicht den gleichen Authentifizierungsprozess wie Windows, um von einem Windows-Computer zu einem anderen zu wechseln, daher kann es PSCredential-Objekte nicht interpretieren.
Verwandt: Verwendung des PowerShell-Befehls Get-Credential
und alles zum Thema Anmeldeinformationen.
Mit diesem Ansatz können Sie auch getrennte Sitzungen nutzen.
Einrichten der Authentifizierung über Public Key
Die Passwort-basierte Authentifizierung ist einfach einzurichten und einfach zu verwenden, hat jedoch zwei Probleme.
- Es gibt keine Möglichkeit, sich ohne manuelle Ausführung der Befehle sicher zu authentifizieren.
- Ein Passwort wird über das Netzwerk gesendet.
Obwohl das Passwort in diesem Fall innerhalb der SSH-Verbindung verschlüsselt ist, erhält der Server das Passwort im Klartext. Wenn der Server auf irgendeine Weise kompromittiert wird, kann dies zu einem Sicherheitsproblem werden.
Generieren von öffentlichen/privaten Schlüsseln
Bei der Verwendung von öffentlicher Schlüssel-Authentifizierung jeglicher Art müssen Sie zuerst einen öffentlichen Schlüssel vom Client generieren. Diese Anforderung gilt sowohl für Linux als auch für Windows.
Auf dem Linux- oder Windows-Server:
- Führen Sie
ssh-keygen
aus, um das Schlüsselpaar zu generieren.
Wenn Sie
ssh-keygen
auf Linux ausführen, generiert es standardmäßig ein RSA-Schlüsselpaar. Viele neue Linux-Betriebssysteme erlauben standardmäßig keine RSA-Schlüsselpaare zur Authentifizierung. Um dies zu korrigieren, verwenden Siessh-keygen -t ed25519
.
2. Sie werden nach einem Pfad zur Speicherung des privaten Schlüssels und nach einer Passphrase zur Verschlüsselung des privaten Schlüssels aufgefordert. Wenn Sie während der Authentifizierung kein Passwort angeben möchten, können Sie die Passphrase leer lassen.
3. Nur für Windows: Führen Sie die folgenden Befehle in PowerShell aus, wobei <ProfilePath>
der Pfad zu Ihrem Profil ist (wahrscheinlich C:\Benutzer\Benutzername).
Die Implementierung von OpenSSH in Windows verfügt über einen ssh-agent-Dienst, mit dem Sie private Schlüssel im Windows Security Context des angemeldeten Benutzers speichern können. Dadurch können Sie Ihren SSH-Privatschlüssel in den ssh-agent importieren und den Schlüssel anschließend vom Dateisystem löschen, um ihn weiter zu sichern.
4. Kopieren Sie nun den generierten öffentlichen Schlüssel (<Benutzer-Home-Verzeichnis>\.ssh\id_ed25519.pub) auf den Server, mit dem Sie eine Verbindung herstellen möchten. Windows bietet kein Tool zum Kopieren an, daher kann dies mit SCP durchgeführt werden. Führen Sie den unten stehenden Befehl aus, um den öffentlichen Schlüssel auf die Linux-Maschine zu kopieren.
Um von Linux nach Windows zu kopieren:
5. Geben Sie das Passwort des angemeldeten Benutzers ein. Sobald Sie es eingegeben haben, kopiert PowerShell/Bash den Schlüssel und Sie werden von der Remote-Maschine getrennt.
Verbinden von/nach Windows/Linux mit öffentlicher Schlüsselauthentifizierung
Sobald Sie die öffentlichen und privaten Schlüssel eingerichtet haben, sollte das Verbinden von/nach Windows und Linux einfach sein. Es ist nahezu identisch mit der passwortbasierten Authentifizierung.
Um mit einem öffentlichen Schlüssel unter Windows eine Verbindung herzustellen, verwenden Sie die identischen Befehle wie in Verbindungsbefehlen gezeigt. Sie werden nur einen Unterschied feststellen: Es wird nicht nach Anmeldeinformationen gefragt.
Im Folgenden finden Sie ein Beispiel für eine Verbindung von Linux nach Windows unter Verwendung des Schalters -v
, um während der Verbindung zu sehen, was passiert.

-v
switch