Lær å sette opp Og bruke PowerShell SSH remoting

Da Microsoft sa At PowerShell ville bli et åpen kildekode-prosjekt som ville kjøre På Windows, Linux og macOS i August 2016, var det en interessant rynke relatert Til PowerShell remoting.Microsoft sa At Denne PowerShell-Kjernen ville støtte fjerning over Secure Shell (SSH) samt Web Services-Management (WS-MAN). Du kan alltid bruke PowerShell SSH-binærfilene, men kunngjøringen indikerte SSH-støtte ville være en integrert del Av PowerShell. Dette åpnet muligheten til å utføre ekstern administrasjon Av Windows Og Linux-systemer enkelt ved hjelp av samme teknologi.

en kort historie Om PowerShell remoting

Microsoft introduserte remoting I PowerShell versjon 2.0 I Windows 7 Og Windows Server 2008 R2, som dramatisk endret landskapet For windows-administratorer. De kunne lage eksterne skrivebordsøkter til servere, Men PowerShell remoting gjorde det mulig å administrere et stort antall servere samtidig.

Remoting I Windows PowerShell er basert PÅ WS-MAN, en åpen standard Fra Distributed Management Task Force. MEN FORDI WS-MAN-basert remoting Er Windows-orientert, måtte du bruke en annen teknologi, vanligvis SSH, for å administrere Linux-systemer.

Innføring AV SSH På PowerShell Core

Vi har blitt vant til å installere programvare På Windows ved hjelp av veiviserne, men installasjonen Av OpenSSH krever mer bakgrunnsinformasjon og mer arbeid fra administratoren.

SSH ER en protokoll for styring av systemer over et eventuelt usikret nettverk. SSH fungerer i en klient-server-modus og er de facto standard for ekstern administrasjon I Linux-miljøer.PowerShell Core bruker OpenSSH, en gaffel FRA SSH 1.2.12 som ble utgitt under en åpen kildekode-lisens. OpenSSH er trolig DEN mest populære SSH-implementeringen.

koden som kreves FOR Å bruke ws-MAN remoting er installert som En del Av Windows-operativsystemet. Du må installere OpenSSH manuelt.

Installere OpenSSH

vi har blitt vant til å installere programvare På Windows ved hjelp av veiviserne, men installasjonen Av OpenSSH krever mer bakgrunnsinformasjon og mer arbeid fra administratoren. Uten noen manuell inngripen, kan mange problemer oppstå.installasjonsprosessen For OpenSSH På Windows har forbedret seg over tid, men det er fortsatt ikke så enkelt som det burde være. Arbeide med konfigurasjonsfilen etterlater mye å være ønsket.

Det er to alternativer når du installerer PowerShell SSH:

  1. På Windows 10 1809, Windows Server 1809, Windows Server 2019 og nyere Er OpenSSH tilgjengelig som en valgfri funksjon.
  2. på tidligere versjoner Av Windows kan Du laste Ned Og installere OpenSSH fra GitHub.

Pass på at systemet har de nyeste oppdateringene før Du installerer OpenSSH.

Installere OpenSSH-tilleggsfunksjonen

Du kan installere OpenSSH-tilleggsfunksjonen Ved Hjelp Av PowerShell. Kontroller først systemet ditt med følgende kommando:

Get-WindowsCapability -Online | where Name -like '*SSH*'
OpenSSH komponenter
Figur 1. Finn openssh-komponentene i systemet ditt.

Figur 1 viser At OpenSSH-klientprogramvaren er forhåndsinstallert.

Du må bruke Windows PowerShell for installasjonen med mindre du laster Ned WindowsCompatibility module For PowerShell Core. Deretter kan du importere Deployment Image Servicing and Management-modulen Fra Windows PowerShell og kjøre kommandoene I PowerShell Core.

Installer serverfunksjonen:

Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
Path :
Online : True
RestartNeeded : False

SSH-filene installeres i C:\Windows\System32\OpenSSH mappe.

Last Ned OpenSSH fra GitHub

Start med å laste ned den nyeste versjonen fra GitHub. Den nyeste versjonen av installasjonsinstruksjonene er på denne linken.

når nedlastingen er fullført, pakker du ut zip-filen i C:\Program Filer\OpenSSH mappe. Endre plassering til C:\Program Filer \ OpenSSH for å installere SSH-tjenestene:

.\install-sshd.ps1
SetServiceObjectSecurity SUCCESS
ChangeServiceConfig2 SUCCESS
ChangeServiceConfig2 SUCCESS

Konfigurere OpenSSH

utfør noen ekstra konfigurasjonstrinn etter At OpenSSH er installert.

Kontroller At OpenSSH-mappen er inkludert i miljøvariabelen systembane:

  • C:\Windows\System32\OpenSSH\ hvis installert Som windows valgfri funksjon
  • C:\Program Filer \ OpenSSH \ hvis installert via OpenSSH download

Sett de to tjenestene til å starte automatisk:

Set-Service sshd -StartupType Automatic
Set-Service ssh-agent -StartupType Automatic

Hvis Du installerte OpenSSH med den valgfrie funksjonen, oppretter Windows en ny brannmurregel for å tillate innkommende tilgang TIL SSH over port 22. Hvis Du installerte OpenSSH fra nedlastingen, oppretter du brannmurregelen med denne kommandoen:

New-NetFirewallRule -Name sshd -DisplayName 'OpenSSH Server (sshd)' `
-Enabled True -Direction Inbound -Protocol TCP `
-Action Allow -LocalPort 22

Start sshd-tjenesten for å generere SSH-tastene:

Start-Service sshd

SSH-tastene og konfigurasjonsfilen ligger i C:\ProgramData\ssh, som er en skjult mappe. Standard skallet som BRUKES AV SSH Er Windows command shell. Dette må endres Til PowerShell:

New-ItemProperty -Path "HKLM:\SOFTWARE\OpenSSH" -Name DefaultShell `
-Value "C:\Program Files\PowerShell\6\pwsh.exe" -PropertyType String -Force

Nå, når du kobler til systemet OVER SSH, Starter PowerShell Core og vil være standard skallet. Du kan også lage standard shell Windows PowerShell hvis ønskelig.

Det er En feil I OpenSSH På Windows. Det fungerer ikke med baner med et mellomrom, for eksempel banen Til PowerShell Core kjørbar! Løsningen er å opprette en symbolsk lenke som oppretter en bane Som OpenSSH kan bruke:

New-Item -ItemType SymbolicLink -Path C:\pwsh -Target 'C:\Program Files\PowerShell\6'

i sshd_config-filen kommenterer du følgende linjer:

PubkeyAuthentication yes
PasswordAuthentication yes

Legg til denne linjen før andre delsystemlinjer:

Subsystem powershell C:\pwsh\pwsh.exe -sshs -NoLogo -NoProfile

dette forteller OpenSSH å kjøre PowerShell Core.

Kommenter ut linjen:

AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

etter å ha lagret endringene i sshd_config-filen, start tjenestene på nytt:

Restart-Service sshd
Start-Service ssh-agent

du må starte sshd-tjenesten på nytt etter endringer i config-filen.

Bruke PowerShell SSH remoting

Bruke remoting OVER SSH ligner veldig på remoting over WS-MAN. Du kan få tilgang til det eksterne systemet direkte Med Invoke-Command:

Invoke-Command -HostName W19DC01 -ScriptBlock {Get-Process}
richard@MANTICORE@w19dc01's password:

du får en melding om passordet, som ikke vises mens du skriver det.

Hvis det er første gang du har koblet til det eksterne systemet VIA SSH, vil du se en melding som ligner på dette:

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)?

Skriv inn ja og trykk Enter.

du kan opprette en remoting-økt:

$sshs = New-PSSession -HostName W19FS01
richard@MANTICORE@w19fs01's password:

Og deretter bruke den:

Invoke-Command -Session $sshs -ScriptBlock {$env:COMPUTERNAME}
W19FS01

Du kan angi En OpenSSH remoting-økt ved Hjelp Av Enter-PSSession på samme måte som en ws-MAN-økt. Du kan angi en eksisterende økt eller bruke hostname-parameteren På Enter-PSSession for å opprette den interaktive økten.

Du kan ikke koble FRA EN SSH – basert økt; det er EN ws-MAN-teknikk.

DU kan bruke ws-MAN og SSH økter for å administrere flere datamaskiner som vist I Figur 2.

øktinformasjonen viser den forskjellige transportmekanismen-HENHOLDSVIS WS-MAN og SSH-og endepunktet som brukes av hver økt.

eksterne administrasjonsøkter
Figur 2. Bruk ws-MAN og SSH økter sammen for å administrere eksterne maskiner.

hvis Du ser nøye På Figur 2, vil du legge merke til at det ikke var noen spørsmål om passordet på SSH-økten fordi systemet ble satt opp MED SSH-nøkkelbasert godkjenning.

Bruke SSH-nøkkelbasert godkjenning

Åpne en forhøyet PowerShell-økt. Endre plasseringen til den .ssh-mappen i brukerområdet:

Set-Location -Path ~\.ssh

Generer nøkkelparet:

ssh-keygen -t ed25519

Legg til nøkkelfilen I SSH-agenten på den lokale maskinen:

ssh-add id_ed25519

når du har lagt til den private nøkkelen I SSH-agent, sikkerhetskopierer du den private nøkkelen til et trygt sted og sletter nøkkelen fra den lokale maskinen.

Kopier id_ed25519.pub fil inn i .ssh-mappe for den samsvarende brukerkontoen på den eksterne serveren. Du kan opprette en slik konto om nødvendig:

$pwd = Read-Host -Prompt 'Password' -AsSecureString
Password: ********
New-LocalUser -Name Richard -Password $pwd -PasswordNeverExpires
Add-LocalGroupMember -Group Administrators -Member Richard

på den eksterne maskinen kopierer du innholdet i nøkkelfilen til authorized_keys-filen:

scp id_ed25519.pub authorized_keys

authorized_keys-filen må ha sine tillatelser endret:

  • åpne Filutforsker, høyreklikk authorized_keys og naviger Til Egenskaper-Sikkerhet-Avansert
  • Klikk Deaktiver Arv.
  • Velg Konverter arvede tillatelser til eksplisitte tillatelser for dette objektet.
  • Fjern alle tillatelser bortsett FRA SYSTEMET og brukerkontoen din. Begge bør ha full kontroll.
Introduksjon TIL SSH Med PowerShell Kjerne.

du vil se referanser til Bruk Av OpenSSHUtils-modulen for å angi tillatelsene, men det er en feil i versjonen Fra PowerShell-Galleriet som gjør authorized_keys-filen ubrukelig.

Start sshd-tjenesten på den eksterne maskinen på nytt.

du kan nå koble til den eksterne maskinen uten å bruke et passord som vist I Figur 2.

hvis du kobler til en maskin uten domene fra en maskin i domenet, må du bruke brukernavnparameteren etter at du har aktivert nøkkelparautentisering:

$ss = New-PSSession -HostName W19ND01 -UserName Richard

du trenger brukernavnet på den eksterne maskinen for å matche domenenavnet ditt. Du blir ikke bedt om et passord.

WS-MANN eller SSH remoting?

Skal DU bruke WS-MAN eller SSH basert remoting? WS-MAN remoting er tilgjengelig på Alle Windows-systemer og er aktivert som standard På Windows Server 2012 og senere serverversjoner. WS-MAN remoting har noen problemer, spesielt double hop problemet. WS-MAN trenger også ekstra arbeid for å fjerne til ikke-domene systemer.

SSH remoting er bare tilgjengelig I PowerShell Core; Windows PowerShell er begrenset TIL WS-MAN remoting. Det tar en betydelig mengde arbeid å installere OG konfigurere SSH remoting. Dokumentasjonen er ikke så god som den trenger å være. Fordelene MED SSH remoting er at du enkelt kan få tilgang til ikke-domene maskiner og ikke-Windows-systemer der SSH er standard for ekstern tilgang.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert.