Een van de geweldige dingen aan hoe PowerShell de afgelopen jaren is veranderd, is dat het veel manieren heeft aangenomen om te communiceren met niet-Windows machines. Een van deze veranderingen was het ondersteunen van PSRemoting via SSH. PSRemoting via SSH betekent ook PSRemoting op Linux!
Hoewel het opzetten van PSRemoting om met SSH en Linux te werken enige configuratie vereist om te laten werken, stelt dit je in staat om PowerShell te gebruiken om rechtstreeks met Linux machines te communiceren.
In deze tutorial ga je leren hoe je een Windows-client instelt om verbinding te maken met een Linux-computer (CentOS) met behulp van PSRemoting via SSH en vice versa. Je leert hoe je je kunt authenticeren met zowel een wachtwoord als met behulp van een certificaat.
Gerelateerd: PowerShell Remoting: De Ultieme Gids
Vereisten
Deze tutorial zal een stapsgewijze handleiding zijn. Als je wilt meedoen, zorg er dan voor dat je van tevoren het volgende hebt:
- 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-rechten op de Linux-machine en lokale beheerdersrechten op de Windows-machine. Na de initiële installatie kunnen sommige van de rechten worden ingetrokken.
Windows (client) instellen voor PSRemoting via SSH
Ten eerste moet je de PSRemoting-client (PowerShell) op je Windows-client configureren. Hiervoor moet je zowel PowerShell 7+ als OpenSSH instellen en configureren.
PowerShell 7+ installeren
Eerst installeer je PowerShell 7+. Deze tutorial zal niet behandelen hoe je dit moet doen. Voor instructies, bekijk de onderstaande link.
OpenSSH installeren
Je moet ook OpenSSH installeren. OpenSSH is het pakket dat PSRemoting zal gebruiken om verbinding te maken met de externe Linux-computer. Je kunt OpenSSH installeren via PowerShell met het Get-WindowsCapability
cmdlet, zoals hieronder wordt getoond.
Afhankelijk van of je van plan bent dat je Windows-host een client en/of een server moet zijn, hangt af van welke Windows-functie je moet installeren. Als je verbinding maakt vanaf de Windows Server naar Linux, heb je alleen de OpenSSH-client nodig. Als je verbinding maakt vanaf Linux naar de Windows Server, heb je alleen de OpenSSH-server nodig.
De onderstaande opdracht vindt alle Windows-functies met een naam die begint met OpenSSH en installeert ze, zodat zowel de client als de server worden geïnstalleerd.
Als je alleen de client wilt installeren, wijzig dan de filter in de
Where-Object
script block naarOpenSSH.Client*
en voor de server moet de filterOpenSSH.Server*
zijn.
Gerelateerd: Aan de slag met SSH en PowerShell
Het opstarten van de SSH-server
Zodra OpenSSH is geïnstalleerd, opent het de Windows-firewall op poort 22, maar start het de OpenSSH-serverdienst niet om te luisteren op de poort. Om de OpenSSH-server op Windows Server te starten, voer je de volgende PowerShell-opdracht uit om de OpenSSH-server te starten en de service in te stellen om op te starten bij het opstarten.
Configuratie van de OpenSSH-configuratie
De volgende stap is om het sshd_config daemon configuratiebestand aan te passen. Binnen dit bestand moet je eerst bevestigen dat wachtwoordauthenticatie is ingeschakeld en ook het PowerShell-subsysteem toevoegen.
Dit gedeelte van de handleiding stelt de eenvoudigste methode in met wachtwoorden. Later in deze handleiding leer je hoe je SSH-authenticatie instelt met certificaten.
- Open het configuratiebestand in je favoriete teksteditor op C:\ProgramData\ssh\sshd_config.
2. Bevestig dat wachtwoordauthenticatie is ingeschakeld waar de regel PasswordAuthentication is uitgeschakeld met een #
aan het begin of is ingesteld op yes
.

3. Voeg het PowerShell-subsysteem toe. Voor PowerShell 7, voeg de regel toe: Subsystem powershell c:/progra~1/powershell/7/pwsh.exe -sshs -NoLogo
.
- De
-sshs
optie wordt gebruikt om PowerShell 7 binnen SSH te laten draaien als een subsysteem. - De
-NoLogo
optie zorgt ervoor dat PowerShell de auteursrechtinformatie verbergt bij het starten, wat ervoor zorgt dat er geen onverwachte uitvoer is bij het starten van de SSH-sessie.
4. Sla het configuratiebestand op en sluit het af.
5. Herstart de sshd Windows-service. Dit kan met PowerShell door Restart-Service sshd
uit te voeren.
Je zou nu alles moeten hebben geconfigureerd wat je nodig hebt om verbinding te maken vanaf (client) en naar (server) deze Windows Server met PSRemoting over SSH.
Het opzetten van Linux (Server) voor PSRemoting via SSH
Hierna volgt Linux met een vergelijkbare configuratie; het installeren van PowerShell en het configureren van OpenSSH.
Merk op dat we CentOS gebruiken, dus sommige commando’s kunnen verschillen als je een andere distributie gebruikt.
Installeren van PowerShell 7+
Installeer eerst PowerShell 7. Deze handleiding zal niet uitleggen hoe je dit moet doen. Zorg er in plaats daarvan voor dat je de volgende link bekijkt.
Gerelateerd: Hoe PowerShell 7 te downloaden en installeren op Windows, macOS en Linux
Configureren van OpenSSH
Net als bij Windows Server heb je OpenSSH nodig. In tegenstelling tot Windows is OpenSSH waarschijnlijk al geïnstalleerd. Voor deze tutorial met CentOS 8 heeft de Linux-machine standaard zowel de client als de server geïnstalleerd, maar je kunt dit controleren met het onderstaande commando:
Als de client en server zijn geïnstalleerd, zou je iets vergelijkbaars moeten krijgen als de onderstaande uitvoer.

Configureer het SSH-configuratiebestand door:
- Het sshd_config-bestand te openen door
sudo vi /etc/ssh/sshd_config
uit te voeren.
2. Voeg de PowerShell-subsysteemregel toe, net zoals op Windows Server, door de onderstaande regel aan het configuratiebestand toe te voegen.
3. Verlaat vi en sla het bestand op.
4. Herstart de ssh-daemon om de wijzigingen toe te passen door sudo systemctl restart sshd
uit te voeren.
Standaard zijn wachtwoord- en openbare-sleutelauthenticatie ingeschakeld in de meeste gevallen, inclusief CentOS 8. Er is geen noodzaak om deze hier toe te voegen.
Verbinding maken met / vanaf Windows/Linux met wachtwoordverificatie
Nadat u alles hebt ingesteld op zowel de Linux- als de Windows-machines, is het tijd om het werk dat u hebt gedaan goed te gebruiken. Laten we nu proberen om vanaf Windows verbinding te maken met Linux en vice versa met behulp van wachtwoordverificatie.
Wachtwoordgebaseerde verificatie ziet er vertrouwd uit en voelt vertrouwd aan bij het gebruik van SSH met een gebruikersnaam en wachtwoord.
Verbindingsopdrachten
Om uit te proberen verbinding te maken met PSRemoting via SSH vanaf Windows naar Linux of vanaf Linux naar Windows, laten we zowel een “ad-hoc” sessie gebruiken met behulp van de Invoke-Command
cmdlet als ook een permanente sessie met behulp van New-PSSession
.
Gerelateerd: Invoke-Command: De beste manier om externe code uit te voeren
Probeer de PSRemoting-verbinding uit met Invoke-Command
door:
- Uw PowerShell 7-console te openen.
2. Parameters in te stellen voor de Invoke-Command
cmdlet. In dit geval zullen de onderstaande parameters verbinding maken met een computer genaamd SRV1 met behulp van een lokale gebruikersaccount op SRV1 genaamd User.
3. Invoke-Command
uitvoeren door de parameters hierboven te splatten en een opdracht uit te voeren (in dit geval Get-Process
) binnen een scriptblok.
Gerelateerd: PowerShell Splatting: Wat is het en hoe werkt het?
Je zou dan een lijst moeten zien van alle lopende processen op de computer SRV1.
Je kunt ook een blijvende verbinding tot stand brengen waarmee je interactief opdrachten kunt uitvoeren door:
- De bovenstaande parameters te verstrekken en deze door te geven aan de cmdlet
New-PSSession
.
2. Verbinden met die sessie op een interactieve manier met behulp van de cmdlet Enter-PSSession
.
3. Na het uitvoeren van de opdracht Enter-PSSession
zoals hierboven, wordt u gevraagd om het wachtwoord voor de gebruiker in te voeren. Nadat u geauthenticeerd bent, bent u verbonden met de andere machine binnen PowerShell.
Let op dat geen van de bovenstaande opdrachten de gebruikelijke parameter Credential
vereiste om een gebruikersnaam en wachtwoord op te geven om verbinding te maken. In plaats daarvan gebruikten we de parameter SSHTransport
. SSH gebruikt niet hetzelfde authenticatieproces als Windows om van de ene Windows-computer naar de andere te gaan, dus het kan geen PSCredential-objecten interpreteren.
Gerelateerd: Gebruik van de PowerShell-cmdlet Get-Credential
en alles wat met referenties te maken heeft.
Met deze aanpak kunt u ook gebruikmaken van losgekoppelde sessies.
Opzetten van authenticatie op basis van openbare sleutels.
Terwijl wachtwoordgebaseerde authenticatie eenvoudig is in te stellen en rechttoe rechtaan te gebruiken, heeft het twee problemen.
- Er is geen manier om te authenticeren zonder dat iemand handmatig de commando’s veilig uitvoert.
- Je stuurt een wachtwoord over het netwerk.
Hoewel het wachtwoord in dit geval versleuteld is binnen de SSH-verbinding, ontvangt de server het wachtwoord in platte tekst. Als de server op enigerlei wijze gecompromitteerd is, kan dit een beveiligingsprobleem worden.
Het genereren van openbare/privé-sleutels
Wanneer je welke vorm van openbare-sleutelauthenticatie dan ook gebruikt, moet je eerst een openbare sleutel genereren vanaf de client. Deze vereiste geldt zowel voor Linux als voor Windows.
Op zowel de Linux- als de Windows-servermachine:
- Voer
ssh-keygen
uit om het sleutelpaar te genereren.
Als je
ssh-keygen
uitvoert op Linux, weet dan dat het standaard een RSA-sleutelpaar genereert. Veel nieuwe Linux-besturingssystemen staan standaard geen RSA-sleutelparen toe voor authenticatie. Om dit te corrigeren, gebruikssh-keygen -t ed25519
.
2. Je wordt gevraagd om een pad op te geven om de privésleutel op te slaan en een wachtwoordzin om de privésleutel te versleutelen. In het geval dat je geen wachtwoord wilt opgeven tijdens authenticatie, kun je de wachtwoordzin leeg laten.
3. Alleen voor Windows: Voer de onderstaande commando’s uit vanuit PowerShell waarbij <Profielpad>
het pad is naar je profiel (waarschijnlijk C:\Gebruikers\GebruikersNaam).
De implementatie van OpenSSH in Windows heeft een ssh-agent-service die het mogelijk maakt om privésleutels op te slaan binnen de Windows-beveiligingscontext van de ingelogde gebruiker. Hiermee kunt u uw SSH-privésleutel importeren naar de ssh-agent en vervolgens de sleutel uit het bestandssysteem verwijderen om deze verder te beveiligen.
4. Kopieer nu de gegenereerde openbare sleutel (<gebruikers thuisdirectory>\.ssh\id_ed25519.pub) naar de server waarmee u verbinding wilt maken. Windows biedt geen tool om deze kopie uit te voeren, dus dit kan worden voltooid met SCP. Voer de onderstaande opdracht uit om de openbare sleutel naar de Linux-machine te kopiëren.
Om van Linux naar Windows te kopiëren:
5. Voer het wachtwoord van de ingelogde gebruiker in. Zodra dit is ingevoerd, zal PowerShell/Bash de sleutel kopiëren en wordt u losgekoppeld van de externe machine.
Verbinding maken van/naar Windows/Linux met openbare sleutelverificatie
Zodra u de openbare en privésleutels hebt ingesteld, zou het verbinden van/naar zowel Windows als Linux eenvoudig moeten zijn. Het is bijna identiek aan authenticatie op basis van wachtwoorden.
Om verbinding te maken met een openbare sleutel op Windows, gebruikt u dezelfde opdrachten als getoond in Verbindingsopdrachten hierboven. U zult slechts één verschil opmerken; u krijgt geen prompt voor referenties.
Hieronder staat een voorbeeld van verbinding maken van Linux naar Windows met de -v
-schakelaar om te zien wat er tijdens de verbinding gebeurt.

-v
switch