Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Overzicht
PowerShell-remoting maakt normaal gesproken gebruik van WinRM voor het onderhandelen van verbindingen en het transport van gegevens. SSH is nu beschikbaar voor Linux- en Windows-plattformen en maakt echte multi-platform PowerShell afstandsbediening mogelijk.
WinRM biedt een robuust hostingmodel voor externe PowerShell-sessies. Externe communicatie op basis van SSH biedt momenteel geen ondersteuning voor externe eindpuntconfiguratie en Just Enough Administration (JEA).
Met SSH-sessiebeheer op afstand kunt u eenvoudige PowerShell-sessies op afstand beheren tussen Windows- en Linux-computers. Met SSH voor externe toegang wordt een PowerShell-hostproces op de doelcomputer gemaakt als een SSH-subsysteem. Uiteindelijk implementeren we een algemeen hostingmodel, vergelijkbaar met WinRM, ter ondersteuning van eindpuntconfiguratie en JEA.
De cmdlets New-PSSession
, Enter-PSSession
en Invoke-Command
hebben nu een nieuwe parameter ingesteld ter ondersteuning van deze nieuwe externe verbinding.
[-HostName <string>] [-UserName <string>] [-KeyFilePath <string>]
Als u een externe sessie wilt maken, geeft u de doelcomputer op met de parameter HostName en geeft u de gebruikersnaam op met Gebruikersnaam. Wanneer u de cmdlets interactief uitvoert, wordt u gevraagd om een wachtwoord. U kunt ook SSH-sleutelverificatie gebruiken met behulp van een bestand met een persoonlijke sleutel met de parameter KeyFilePath. Het maken van sleutels voor SSH-verificatie verschilt per platform.
Algemene informatie over de installatie
PowerShell 6 of hoger en SSH moet op alle computers zijn geïnstalleerd. Installeer zowel de SSH-client (ssh.exe
) als de server (sshd.exe
) zodat u op afstand van en naar de computers kunt. OpenSSH voor Windows is nu beschikbaar in Windows 10 build 1809 en Windows Server 2019. Zie Windows beheren met OpenSSHvoor meer informatie. Voor Linux installeert u SSH, inclusief sshd-server, die geschikt is voor uw platform. U moet ook PowerShell installeren vanuit GitHub om de SSH-remote-functie te verkrijgen.
De SSH-server moet zijn geconfigureerd om een SSH-subsysteem te maken voor het hosten van een PowerShell-proces op de externe computer. En u moet wachtwoord inschakelen of verificatie op basis van een sleutel.
De SSH-service installeren op een Windows-computer
Installeer de nieuwste versie van PowerShell. Zie PowerShell installeren in Windowsvoor meer informatie.
U kunt bevestigen dat PowerShell SSH-remotingondersteuning heeft door de
New-PSSession
-parametersets weer te geven. U ziet dat er namen van parametersets zijn die beginnen met SSH-. Deze parametersets bevatten SSH- parameters.(Get-Command New-PSSession).ParameterSets.Name
Name ---- SSHHost SSHHostHashParam
Installeer de nieuwste Win32 OpenSSH. Zie Aan de slag met OpenSSH-voor installatie-instructies.
Notitie
Als u PowerShell wilt instellen als de standaardshell voor OpenSSH, raadpleegt u Windows configureren voor OpenSSH-.
Bewerk het
sshd_config
bestand in$Env:ProgramData\ssh
.Zorg ervoor dat wachtwoordverificatie is ingeschakeld:
PasswordAuthentication yes
Maak het SSH-subsysteem dat als host fungeert voor een PowerShell-proces op de externe computer:
Subsystem powershell C:/progra~1/powershell/7/pwsh.exe -sshs
Notitie
Er is een fout in OpenSSH voor Windows die voorkomt dat u een pad gebruikt met spaties voor het uitvoerbare subsysteem. Er zijn twee manieren om dit probleem te omzeilen:
- Gebruik de korte naam van de Windows 8.3-stijl voor het uitvoerbare PowerShell-pad
- Een symbolische koppeling maken naar het uitvoerbare PowerShell-bestand dat resulteert in een pad zonder spaties
Zie het probleem #784 in de PowerShell-/Win32-OpenSSH-opslagplaats voor meer informatie.
U hoeft alleen de 8.3-stijlnaam op te halen voor het segment van het pad dat de ruimte bevat. PowerShell 7 is standaard geïnstalleerd in
C:\Program Files\PowerShell\7\
. De naam van de 8.3-stijl moetProgram Files
zijnprogra~1
. U kunt de volgende opdracht gebruiken om de naam te controleren:Get-CimInstance Win32_Directory -Filter 'Name="C:\\Program Files"' | Select-Object EightDotThreeFileName
De naam 8.3 is een verouderde functie van het NTFS-bestandssysteem dat kan worden uitgeschakeld. Deze functie moet zijn ingeschakeld voor het volume waarop PowerShell is geïnstalleerd.
U kunt ook een symbolische koppeling maken naar het uitvoerbare PowerShell-bestand dat resulteert in een pad zonder spaties. Deze methode heeft de voorkeur omdat u hiermee de koppeling kunt bijwerken als het pad naar het uitvoerbare PowerShell-bestand ooit verandert, zonder dat u het
sshd_config
bestand ook hoeft bij te werken.Gebruik de volgende opdracht om een symbolische koppeling naar het uitvoerbare bestand te maken:
$newItemSplat = @{ ItemType = 'SymbolicLink' Path = 'C:\ProgramData\ssh\' Name = 'pwsh.exe' Value = (Get-Command pwsh.exe).Source } New-Item @newItemSplat
Met deze opdracht maakt u de symbolische koppeling in dezelfde map die door de OpenSSH-server wordt gebruikt om de hostsleutels en andere configuratie op te slaan.
Schakel desgewenst sleutelverificatie in:
PubkeyAuthentication yes
Zie OpenSSH-sleutels beherenvoor meer informatie.
Start de service sshd opnieuw.
Restart-Service sshd
Voeg het pad toe waar OpenSSH is geïnstalleerd in de omgevingsvariabele PATH. Bijvoorbeeld:
C:\Program Files\OpenSSH\
. Met deze vermelding kan dessh.exe
worden gevonden.
De SSH-service installeren op een Ubuntu Linux-computer
Installeer de nieuwste versie van PowerShell. Zie PowerShell installeren op Ubuntu.
Installeer Ubuntu OpenSSH Server.
sudo apt install openssh-client sudo apt install openssh-server
Bewerk het
sshd_config
bestand op locatie/etc/ssh
.Zorg ervoor dat wachtwoordverificatie is ingeschakeld:
PasswordAuthentication yes
Schakel desgewenst sleutelverificatie in:
PubkeyAuthentication yes
Zie de manpage voor ssh-keygenvoor meer informatie over het maken van SSH-sleutels op Ubuntu.
Voeg een Vermelding van een PowerShell-subsysteem toe:
Subsystem powershell /usr/bin/pwsh -sshs -NoLogo
Notitie
De standaardlocatie van het uitvoerbare PowerShell-bestand is
/usr/bin/pwsh
. De locatie kan variëren, afhankelijk van hoe u PowerShell hebt geïnstalleerd.
Start de ssh--service opnieuw.
sudo systemctl restart sshd.service
De SSH-service installeren op een macOS-computer
Installeer de nieuwste versie van PowerShell. Voor meer informatie, PowerShell installeren op macOS.
Zorg ervoor dat externe SSH-communicatie is ingeschakeld door de volgende stappen uit te voeren:
-
System Settings
openen. - Klik op
General
- Klik op
Sharing
. - Controleer
Remote Login
omRemote Login: On
in te stellen. - Toegang tot de juiste gebruikers toestaan.
-
Bewerk het
sshd_config
bestand op locatie/private/etc/ssh/sshd_config
.Gebruik een teksteditor zoals nano:
sudo nano /private/etc/ssh/sshd_config
Zorg ervoor dat wachtwoordverificatie is ingeschakeld:
PasswordAuthentication yes
Voeg een Vermelding van een PowerShell-subsysteem toe:
Subsystem powershell /usr/local/bin/pwsh -sshs -NoLogo
Notitie
De standaardlocatie van het uitvoerbare PowerShell-bestand is
/usr/local/bin/pwsh
. De locatie kan variëren, afhankelijk van hoe u PowerShell hebt geïnstalleerd.Schakel desgewenst sleutelverificatie in:
PubkeyAuthentication yes
Start de service sshd opnieuw.
sudo launchctl stop com.openssh.sshd sudo launchctl start com.openssh.sshd
Notitie
Wanneer u uw besturingssysteem bijwerken, kan het SSH-configuratiebestand worden overschreven. Controleer het configuratiebestand na een upgrade.
Authenticatie
PowerShell-remoting via SSH is afhankelijk van de authenticatie-uitwisseling tussen de SSH-client en de SSH-service en implementeert zelf geen authenticatieschema's. Het resultaat is dat geconfigureerde verificatieschema's, waaronder meervoudige verificatie, worden verwerkt door SSH en onafhankelijk van PowerShell. U kunt bijvoorbeeld de SSH-service configureren om verificatie van openbare sleutels en een eenmalig wachtwoord te vereisen voor extra beveiliging. De configuratie van meervoudige verificatie valt buiten het bereik van deze documentatie. Raadpleeg de documentatie voor SSH over het correct configureren van meervoudige verificatie en het valideren dat deze werkt buiten PowerShell voordat u probeert deze te gebruiken met externe communicatie met PowerShell.
Notitie
Gebruikers behouden dezelfde bevoegdheden in externe sessies. Dit betekent dat beheerders toegang hebben tot een shell met verhoogde bevoegdheid en normale gebruikers niet.
Voorbeeld van PowerShell-remotegebruik
De eenvoudigste manier om remote access te testen, is door het uit te proberen op één computer. In dit voorbeeld maken we een externe sessie terug naar dezelfde Linux-computer. We gebruiken PowerShell-cmdlets interactief, waardoor we interactieve prompts van SSH zien die vragen om de hostcomputer te verifiëren en om een wachtwoord te geven. U kunt hetzelfde doen op een Windows-computer om ervoor te zorgen dat externe communicatie werkt. Vervolgens kunt u op afstand tussen computers de hostnaam wijzigen.
Linux naar Linux
$session = New-PSSession -HostName UbuntuVM1 -UserName TestUser
The authenticity of host 'UbuntuVM1 (9.129.17.107)' can't be established.
ECDSA key fingerprint is SHA256:2kCbnhT2dUE6WCGgVJ8Hyfu1z2wE4lifaJXLO7QJy0Y.
Are you sure you want to continue connecting (yes/no)?
TestUser@UbuntuVM1s password:
$session
Id Name ComputerName ComputerType State ConfigurationName Availability
-- ---- ------------ ------------ ----- ----------------- ------------
1 SSH1 UbuntuVM1 RemoteMachine Opened DefaultShell Available
Enter-PSSession $session
[UbuntuVM1]: PS /home/TestUser> uname -a
Linux TestUser-UbuntuVM1 4.2.0-42-generic 49~16.04.1-Ubuntu SMP Wed Jun 29 20:22:11 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
[UbuntuVM1]: PS /home/TestUser> Exit-PSSession
Invoke-Command $session -ScriptBlock { Get-Process pwsh }
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName PSComputerName
------- ------ ----- ----- ------ -- -- ----------- --------------
0 0 0 19 3.23 10635 635 pwsh UbuntuVM1
0 0 0 21 4.92 11033 017 pwsh UbuntuVM1
0 0 0 20 3.07 11076 076 pwsh UbuntuVM1
Linux naar Windows
Enter-PSSession -HostName WinVM1 -UserName PTestName
PTestName@WinVM1s password:
[WinVM1]: PS C:\Users\PTestName\Documents> cmd /c ver
Microsoft Windows [Version 10.0.10586]
Windows naar Windows
C:\Users\PSUser\Documents>pwsh.exe
PowerShell
Copyright (c) Microsoft Corporation. All rights reserved.
$session = New-PSSession -HostName WinVM2 -UserName PSRemoteUser
The authenticity of host 'WinVM2 (10.13.37.3)' can't be established.
ECDSA key fingerprint is SHA256:kSU6slAROyQVMEynVIXAdxSiZpwDBigpAF/TXjjWjmw.
Are you sure you want to continue connecting (yes/no)?
Warning: Permanently added 'WinVM2,10.13.37.3' (ECDSA) to the list of known hosts.
PSRemoteUser@WinVM2's password:
$session
Id Name ComputerName ComputerType State ConfigurationName Availability
-- ---- ------------ ------------ ----- ----------------- ------------
1 SSH1 WinVM2 RemoteMachine Opened DefaultShell Available
Enter-PSSession -Session $session
[WinVM2]: PS C:\Users\PSRemoteUser\Documents> $PSVersionTable
Name Value
---- -----
PSEdition Core
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
SerializationVersion 1.1.0.1
BuildVersion 3.0.0.0
CLRVersion
PSVersion 6.0.0-alpha
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
GitCommitId v6.0.0-alpha.17
[WinVM2]: PS C:\Users\PSRemoteUser\Documents>
Beperkingen
De opdracht sudo werkt niet in een externe sessie naar een Linux-computer.
PSRemoting via SSH biedt geen ondersteuning voor profielen en heeft geen toegang tot
$PROFILE
. Tijdens een sessie kunt u een profiel laden door middel van dot sourcing met het volledige bestandspad. Dit is niet gerelateerd aan SSH-profielen. U kunt de SSH-server configureren voor het gebruik van PowerShell als de standaardshell en het laden van een profiel via SSH. Zie de SSH-documentatie voor meer informatie.Voorafgaand aan PowerShell 7.1 biedt externe communicatie via SSH geen ondersteuning voor externe sessies van de tweede hop. Deze mogelijkheid was beperkt tot sessies met behulp van WinRM. Met PowerShell 7.1 kunnen
Enter-PSSession
enEnter-PSHostProcess
werken vanuit een interactieve externe sessie.