Leren instellen en gebruiken PowerShell SSH remoting
Posted on
toen Microsoft zei PowerShell zou een open source project dat zou draaien op Windows, Linux en macOS in augustus 2016, was er een interessante rimpel in verband met PowerShell remoting.
Microsoft zei dat deze PowerShell Core zou ondersteunen remoting over Secure Shell (SSH) evenals Web Services-Management (WS-MAN). Je kunt altijd de PowerShell SSH binaries gebruiken, maar de aankondiging gaf aan dat SSH ondersteuning een integraal onderdeel zou zijn van PowerShell. Dit opende de mogelijkheid om het beheer op afstand van Windows en Linux-systemen eenvoudig uit te voeren met behulp van dezelfde technologieën.
Microsoft introduceerde remoting in PowerShell versie 2.0 in Windows 7 en Windows Server 2008 R2, wat het landschap voor Windows-beheerders drastisch veranderde. Ze konden remote desktop sessies maken naar servers, maar PowerShell remoting maakte het mogelijk om grote aantallen servers tegelijkertijd te beheren.
Remoting in Windows PowerShell is gebaseerd op WS-MAN, een open standaard van de Distributed Management Task Force. Maar omdat ws-MAN-gebaseerde remoting Windows georiënteerd is, moest je een andere technologie gebruiken, meestal SSH, om Linux-systemen te beheren.
introductie van SSH op PowerShell Core
we zijn gewend geraakt aan het installeren van software op Windows met behulp van de wizards, maar de installatie van OpenSSH vereist meer achtergrondinformatie en meer werk van de beheerder.
SSH is een protocol voor het beheren van systemen over een mogelijk onbeveiligd netwerk. SSH werkt in een client-server modus en is de de facto standaard voor beheer op afstand in Linux-omgevingen.
PowerShell Core gebruikt OpenSSH, een fork van SSH 1.2.12 die werd uitgebracht onder een open source licentie. OpenSSH is waarschijnlijk de meest populaire SSH implementatie.
de code die nodig is om ws-MAN remoting te gebruiken, is geïnstalleerd als onderdeel van het Windows-besturingssysteem. U moet OpenSSH handmatig installeren.
het installeren van OpenSSH
we zijn gewend geraakt aan het installeren van software op Windows met behulp van de wizards, maar de installatie van OpenSSH vereist meer achtergrondinformatie en meer werk van de beheerder. Zonder enige handmatige interventie kunnen veel problemen ontstaan.
het installatieproces voor OpenSSH op Windows is in de loop der tijd verbeterd, maar het is nog steeds niet zo eenvoudig als het zou moeten zijn. Werken met het configuratiebestand laat veel te wensen over.
Er zijn twee opties bij het installeren van PowerShell SSH:
op Windows 10 1809, Windows Server 1809, Windows Server 2019 en hoger is OpenSSH beschikbaar als een optionele functie.
op eerdere versies van Windows kunt u OpenSSH downloaden en installeren vanaf GitHub.
zorg ervoor dat uw systeem de laatste patches heeft voordat u OpenSSH installeert.
de optionele functie van OpenSSH installeren
u kunt de optionele functie van OpenSSH installeren met PowerShell. Controleer eerst je systeem met het volgende commando:
Get-WindowsCapability -Online | where Name -like '*SSH*'
figuur 1. Vind de OpenSSH componenten in uw systeem.
figuur 1 laat zien dat de OpenSSH client software voorgeïnstalleerd is.
u moet Windows PowerShell gebruiken voor de installatie, tenzij u de WindowsCompatibility module voor PowerShell Core downloadt. Vervolgens kunt u de Deployment Image Service en Management module importeren vanuit Windows PowerShell en de opdrachten uitvoeren in PowerShell Core.
de SSH-bestanden installeren in de C:\Windows\System32\OpenSSH map.
Download OpenSSH van GitHub
begin met het downloaden van de nieuwste versie van GitHub. De laatste versie van de installatie-instructies vindt u op deze link.
nadat het downloaden is voltooid, pak het zip-bestand uit in de C:\Program bestanden\OpenSSH map. Locatie wijzigen naar C:\Program bestanden\OpenSSH om de SSH-services te installeren:
Als u OpenSSH hebt geïnstalleerd met de optionele functie, dan maakt Windows een nieuwe firewallregel om binnenkomende toegang van SSH via poort 22 toe te staan. Als u OpenSSH hebt geïnstalleerd vanaf de download, maak dan de firewallregel met dit commando:
Start de SSHD-service om de SSH-sleutels te genereren:
Start-Service sshd
de SSH-sleutels en het configuratiebestand bevinden zich in C:\ProgramData\ssh, dat is een verborgen map. De standaard shell gebruikt door SSH is de windows command shell. Dit moet veranderen in PowerShell:
nu, wanneer u verbinding maakt met het systeem via SSH, zal PowerShell Core starten en zal de standaard shell zijn. U kunt ook de standaard shell Windows PowerShell indien gewenst.
Er is een bug in OpenSSH op Windows. Het werkt niet met paden met een spatie, zoals het pad naar de PowerShell Core executable! De oplossing is om een symbolische link aan te maken die een pad maakt dat OpenSSH kan gebruiken:
na het opslaan van de wijzigingen in het sshd_config-bestand, Herstart de services:
Restart-Service sshd Start-Service ssh-agent
u moet de SSHD-service herstarten na elke wijziging in het configuratiebestand.
gebruik maken van PowerShell SSH remoting
gebruik maken van remoting over SSH is zeer vergelijkbaar met remoting over WS-MAN. U kunt direct toegang krijgen tot het systeem op afstand met Invoke-Command:
u krijgt een prompt voor het wachtwoord, dat niet wordt weergegeven als u het typt.
als het de eerste keer is dat u verbinding maakt met het systeem op afstand via SSH, dan zult u een bericht zien dat vergelijkbaar is met dit:
The authenticity of host 'servername (10.00.00.001)' can't be established. ECDSA key fingerprint is SHA256:(<a large string>). Are you sure you want to continue connecting (yes/no)?
u kunt een OpenSSH remoting sessie openen met Enter-PSSession op dezelfde manier als een WS-MAN sessie. U kunt een bestaande sessie invoeren of de hostname parameter op Enter-PSSession gebruiken om de interactieve sessie aan te maken.
u kunt een op SSH gebaseerde sessie niet verbreken; dat is een ws-MAN techniek.
U kunt ws-MAN-en SSH-sessies gebruiken om meerdere computers te beheren, zoals weergegeven in Figuur 2.
De sessieinformatie toont het verschillende transportmechanisme — respectievelijk WS-MAN en SSH — en het eindpunt dat door elke sessie wordt gebruikt.
Figuur 2. Gebruik WS-MAN en SSH sessies samen om externe machines te beheren.
als je goed kijkt naar figuur 2, zul je merken dat er geen prompt was voor het wachtwoord op de SSH sessie omdat het systeem was ingesteld met SSH sleutel-gebaseerde authenticatie.
met SSH-sleutelgebaseerde authenticatie
Open een verhoogde PowerShell-sessie. Verander de locatie naar de .SSH-map in uw gebruikersgebied:
Set-Location -Path ~\.ssh
Genereer het sleutelpaar:
ssh-keygen -t ed25519
voeg het sleutelbestand toe aan de SSH-agent op de lokale machine:
ssh-add id_ed25519
zodra u de private sleutel aan SSH-agent hebt toegevoegd, maakt u een back-up van de private sleutel naar een veilige locatie en verwijdert u de sleutel van de lokale machine.
kopieer id_ed25519.pub bestand in de .ssh-map voor het overeenkomende gebruikersaccount op de externe server. U kunt zo ’n account aanmaken indien nodig:
$pwd = Read-Host -Prompt 'Password' -AsSecureString Password: ******** New-LocalUser -Name Richard -Password $pwd -PasswordNeverExpires Add-LocalGroupMember -Group Administrators -Member Richard
kopieer de inhoud van het sleutelbestand naar het authorized_keys-bestand:
scp id_ed25519.pub authorized_keys
het authorized_keys-bestand moet zijn rechten wijzigen:
Open File Explorer, klik met de rechtermuisknop op authorized_keys en navigeer naar Properties-Security-Advanced
klik op overerving uitschakelen.
Selecteer overgenomen machtigingen converteren naar expliciete machtigingen voor dit object.
Verwijder alle rechten behalve voor het systeem en uw gebruikersaccount. Beide moeten de volledige controle hebben.
Inleiding tot SSH met PowerShell-kern.
u zult verwijzingen zien naar het gebruik van de opensshutils module om de rechten in te stellen, maar er is een bug in de versie van de PowerShell galerij die het authorized_keys bestand onbruikbaar maakt.
Herstart de SSHD-service op de machine op afstand.
u kunt nu verbinding maken met de machine op afstand zonder een wachtwoord te gebruiken zoals weergegeven in Figuur 2.
Als u verbinding maakt met een niet-domein machine vanaf een machine in het domein, dan moet u de gebruikersnaam parameter gebruiken na het inschakelen van key-pair authenticatie:
$ss = New-PSSession -HostName W19ND01 -UserName Richard
u hebt de gebruikersnaam op de externe machine nodig om overeen te komen met uw domein gebruikersnaam. U wordt niet gevraagd om een wachtwoord.
WS-MAN of SSH remoting?
moet u ws-MAN of SSH-gebaseerde remoting gebruiken? WS-MAN remoting is beschikbaar op alle Windows-systemen en is standaard ingeschakeld op Windows Server 2012 en latere serverversies. WS-MAN remoting heeft een aantal problemen, met name de double hop kwestie. WS-MAN heeft ook extra werk nodig om niet-domeinsystemen op afstand te houden.
SSH remoting is alleen beschikbaar in PowerShell Core; Windows PowerShell is beperkt tot ws-MAN remoting. Het kost een aanzienlijke hoeveelheid werk om SSH remoting te installeren en te configureren. De documentatie is niet zo goed als nodig is. De voordelen van SSH remoting zijn dat u gemakkelijk toegang tot niet-domein machines en niet-Windows-systemen waar SSH is de standaard voor toegang op afstand.