SSH und PowerShell: Einrichten des Windows SSH-Clients

Es war einmal, als Sie bei der Verwendung von Windows PowerShell mit PowerShell Remoting auf bestimmte Arten von Computern beschränkt waren. Da PowerShell Remoting nur den WsMan-Anbieter unterstützte, waren Ihre Chancen, beispielsweise eine Verbindung zu Computern mit Linux herzustellen, gleich null. Doch im Jahr 2015 hat Microsoft Unterstützung für SSH eingeführt, was ein enormes Potenzial mit sich brachte und Ihnen schließlich ermöglichte, SSH und PowerShell zusammen zu verwenden.

In diesem Artikel werden wir uns genauer damit befassen, wie Sie den SSH-Client von Windows einrichten können und wie Sie SSH und PowerShell Remoting nutzen können.

Dieser Beitrag zu SSH und PowerShell ist Teil der Blog-Serie #PS7Now. Vergewissern Sie sich, dass Sie alle anderen Beitragenden in dieser Serie am Ende dieses Beitrags überprüfen.

Vor dem Beginn

Dieser Artikel wird ein Schritt-für-Schritt-Tutorial sein. Wenn Sie beabsichtigen, mitzumachen, stellen Sie sicher, dass Sie die folgenden Voraussetzungen erfüllen:

  • Windows 10 – Alle Beispiele verwenden Windows 10 Build 1903. Das Beispiel befindet sich im gleichen Bereich wie der entfernte Windows Server.
  • PowerShell v6+ installiert auf Windows 10 – Alle Beispiele verwenden PowerShell 7 RC2.
  • A remote SSH server – All examples will use a Windows Server SSH machine. If you’re connecting to a Linux machine, you can skip the server setup steps.
  • TCP-Port 22 verfügbar auf dem entfernten Server

SSH-Client (Windows 10) Einrichtung

Bevor Sie eine PowerShell-Konsole öffnen, müssen Sie zunächst einige einmalige Aufgaben durchführen, um SSH und PowerShell so einzurichten, dass Windows 10 eine Verbindung zu einem entfernten SSH-Server herstellen kann.

Fügen Sie den OpenSSH-Ordner zur PATH-Umgebungsvariable hinzu

OpenSSH ist auf Windows 10 vorinstalliert, benötigt jedoch manchmal etwas Unterstützung, um mit PowerShell Remoting zu funktionieren. Wenn Sie beispielsweise bereits versucht haben, Enter-PSSession zu verwenden, um eine Verbindung zu einem entfernten SSH-System herzustellen, und auf den unten stehenden Fehler gestoßen sind, müssen Sie sicherstellen, dass der Pfad zur OpenSSH-Ausführbaren Datei (ssh.exe) in der PATH-Umgebungsvariable vorhanden ist.

Enter-PSSession : An error has occurred which PowerShell cannot handle. A remote session might have ended.

Um den Pfad des OpenSSH-Ordners zur PATH-Umgebungsvariable hinzuzufügen, klicken Sie auf die Start-Schaltfläche und suchen Sie nach erweiterten Systemeinstellungen. Klicken Sie dann auf Erweiterte Systemeinstellungen anzeigen, wie unten gezeigt.

Adding OpenSSH folder path

Wenn das Fenster Systemeigenschaften angezeigt wird, klicken Sie auf die Schaltfläche Umgebungsvariablen.

Environment Variables in System Properties

Im Fenster Umgebungsvariablen wählen Sie unter Systemvariablen Path aus und klicken Sie auf Bearbeiten.

System Variables in the Environment Variables

Im Fenster Umgebungsvariable bearbeiten klicken Sie auf Neu und geben Sie dann den Pfad ein, in dem die ausführbare Datei ssh.exe liegt. In diesem Tutorial ist der Pfad C:\Program Files\OpenSSH, wie unten gezeigt. Nach der Eingabe klicken Sie zweimal auf OK, um den neuen Wert zu speichern.

Editing Environment Variable

SSH-Subsystem angeben

Sie müssen jetzt das SSH-Subsystem angeben, auf das PowerShell zugreifen soll, wenn eine Verbindung über SSH mit dem entfernten Windows Server hergestellt wird. Wenn Sie PowerShell nicht mitteilen, welches Subsystem verwendet werden soll, erhalten Sie unweigerlich folgenden Fehler:

Enter-PSSession : Der Hintergrundprozess hat einen Fehler gemeldet mit der folgenden Nachricht: Die SSH-Client-Sitzung wurde mit der Fehlermeldung beendet: Subsystem-Anforderung fehlgeschlagen auf Kanal 0.

Beachten Sie, dass Sie diese Schritte nicht ausführen müssen, wenn Sie sich nicht mit einer Windows Server-Maschine verbinden.

Auf dem entfernten Windows Server öffnen Sie die Datei C:\ProgramData\ssh\ssh_config. Scrollen Sie zum Abschnitt override default of no subsystems in der Datei ssh_config. Der Abschnitt wird wie im folgenden Screenshot aussehen.

Override Default of no Subsystems

Fügen Sie unterhalb der bestehenden Subsystem-Zeile das PowerShell-Subsystem mit der folgenden Zeile hinzu:

Subsystem	powershell pwsh.exe -sshs -NoLogo -NoProfile

Speichern Sie nun die Datei ssh_config und starten Sie den sshd-Windowsdienst auf dem entfernten Windows-Server neu, wie unten gezeigt.

Get-Service -Name sshd | Restart-Service

Nach dem Neustart des Dienstes sollten Sie nun eine Verbindung über SSH und PowerShell herstellen können.

Verbindung über PowerShell und SSH

Jetzt, da die Konfiguration abgeschlossen ist, ist es Zeit, PowerShell Remoting zu testen.

Versuchen Sie zunächst, eine interaktive Sitzung zu starten, indem Sie das Cmdlet Enter-PSSession verwenden. Anders als gewohnt, verwenden Sie nicht den Parameter ComputerName. Stattdessen verwenden Sie den Parameter HostName, um den Remote-Computer anzugeben.

Standardmäßig verwendet PowerShell Remoting immer noch WsMan. Um dies zu ändern, verwenden Sie den Parameter SSHTransport, um anzugeben, dass Sie über SSH und PowerShell eine Verbindung herstellen möchten.

Wenn Sie sich beim ersten Verbindungsversuch mit Benutzername und Passwort anmelden, müssen Sie einen SSH-Privatschlüssel erstellen. Sie werden aufgefordert, wie unten gezeigt. Wenn Sie aufgefordert werden, geben Sie ‚y‘ ein, um zu akzeptieren.

Creating SSH Private Key

Anschließend werden Sie nach dem Kennwort des Benutzers gefragt, mit dem Sie derzeit angemeldet sind.

Beachten Sie, dass in diesem Beispiel der Windows 10-Client und der Windows Server SSH-Server im selben Active Directory-Domäne sind. Standardmäßig versucht PowerShell Remoting, sich mit dem angemeldeten Benutzer zu authentifizieren. Sie können auch den Credential-Parameter verwenden, um einen anderen Benutzernamen und ein Passwort anzugeben.

Nachdem Sie das Passwort bereitgestellt haben, sollten Sie sich dann an einer vertrauten PowerShell Remoting-Eingabeaufforderung befinden.

Powershell Remoting Prompt

Beenden Sie nun die Sitzung mit exit und versuchen Sie dann New-PSSession. Beachten Sie, dass bei Verwendung der gleichen HostName– und SSHTransport-Parameter wie zuvor, der Transport nun als SSH angezeigt wird.

Sie können immer noch WsMan als Transportprotokoll verwenden, indem Sie den ComputerName-Parameter ohne Verwendung des SSHTransport-Parameters verwenden.

Sie müssen keinen Benutzernamen und kein Passwort für SSH verwenden. Sie könnten stattdessen eine Private-Key-Datei verwenden und den KeyFilePath-Parameter verwenden, um den Speicherort anzugeben.

New PSSession Showing up SSH

Vergessen Sie nicht, Ihre offenen Sitzungen mit Get-PSSession | Remove-PSSession aufzuräumen!

Zusammenfassung

Sie sollten nun wissen, wie Sie sowohl Windows 10 als auch Windows Server so einrichten können, dass sie SSH mit PowerShell Remoting verwenden. Einmal konfiguriert, besteht der einzige Unterschied zwischen der Verwendung von WsMan als Transportprotokoll und SSH in einigen Parametern!

Wenn Sie mehr über PowerShell und SSH erfahren möchten, sollten Sie sich unbedingt den Artikel zur PowerShell-Remotesteuerung über SSH in der Microsoft-Dokumentation ansehen.

#PS7Now-Beiträger

Dieser Beitrag war Teil einer Serie über PowerShell 7 von den großartigen Beitragenden, die Sie unten sehen. Schauen Sie sich unbedingt ihre Beiträge an und sehen Sie, was sie auf ihren Blogs tun!

Author Twitter Blog
Josh King @WindosNZ https://toastit.dev/
Adam Bertram @adbertram https://adamtheautomator.com/
Jonathan Medd @jonathanmedd
Thomas Lee @doctordns https://tfl09.blogspot.com/
Prateek Singh @singhprateik https://ridicurious.com
Dave Carroll @thedavecarroll https://powershell.anovelidea.org/
Dan Franciscus @dan_franciscus https://winsysblog.com/
Jeff Hicks @jeffhicks https://jdhitsolutions.com
Josh Duffney @joshduffney http://duffney.io/
Mike Kanakos @MikeKanakos https://www.networkadm.in/
Tommy Maynard @thetommymaynard https://tommymaynard.com//
#PS7Now Contributors

Source:
https://adamtheautomator.com/powershell-ssh/