Aflați cum să configurați și să utilizați PowerShell SSH remoting

când Microsoft a spus că PowerShell va deveni un proiect open source care va rula pe Windows, Linux și macOS în August 2016, a existat un rid interesant legat de PowerShell remoting.Microsoft a spus că acest nucleu PowerShell va sprijini remoting over Secure Shell (SSH), precum și Web Services-Management (ws-MAN). Ați putea folosi întotdeauna binarele PowerShell SSH, dar anunțul a indicat că suportul SSH ar fi o parte integrantă a PowerShell. Acest lucru a deschis capacitatea de a efectua administrarea la distanță a sistemelor Windows și Linux folosind cu ușurință aceleași tehnologii.

o scurtă istorie a PowerShell remoting

Microsoft a introdus remoting în PowerShell versiunea 2.0 În Windows 7 și Windows Server 2008 R2, care a schimbat dramatic peisajul pentru administratorii Windows. Acestea ar putea crea sesiuni desktop la distanță pe servere, dar PowerShell remoting a făcut posibilă gestionarea simultană a unui număr mare de servere.

Remoting în Windows PowerShell se bazează pe WS-MAN, un standard deschis de la Task Force Management distribuit. Dar pentru că ws-MAN-based remoting este orientat spre Windows, trebuia să utilizați o altă tehnologie, de obicei SSH, pentru a administra sistemele Linux.

introducerea SSH pe PowerShell Core

ne-am obișnuit să instalăm software pe Windows folosind vrăjitorii, dar instalarea OpenSSH necesită mai multe informații de fundal și mai multă muncă de la administrator.

SSH este un protocol pentru gestionarea sistemelor într-o rețea posibil nesecurizată. SSH funcționează într-un mod client-server și este standardul de facto pentru administrarea la distanță în mediile Linux.

PowerShell Core utilizează OpenSSH, o furcă din SSH 1.2.12 care a fost lansată sub o licență open source. OpenSSH este probabil cea mai populară implementare SSH.

codul necesar pentru a utiliza ws-MAN remoting este instalat ca parte a sistemului de operare Windows. Trebuie să instalați manual OpenSSH.

instalarea OpenSSH

ne-am obișnuit să instalăm software pe Windows folosind vrăjitorii, dar instalarea OpenSSH necesită mai multe informații de fundal și mai multă muncă de la administrator. Fără o intervenție manuală, pot apărea multe probleme.

procesul de instalare pentru OpenSSH pe Windows sa îmbunătățit în timp, dar încă nu este la fel de ușor cum ar trebui să fie. Lucrul cu fișierul de configurare lasă mult de dorit.

există două opțiuni la instalarea PowerShell SSH:

  1. pe Windows 10 1809, Windows Server 1809, Windows Server 2019 și versiuni ulterioare, OpenSSH este disponibil ca o caracteristică opțională.
  2. în versiunile anterioare de Windows, puteți descărca și instala OpenSSH de la GitHub.

asigurați-vă că sistemul dvs. are cele mai recente patch-uri înainte de a instala OpenSSH.

instalarea caracteristicii opționale OpenSSH

puteți instala caracteristica OpenSSH opțională utilizând PowerShell. Mai întâi, verificați sistemul cu următoarea comandă:

Get-WindowsCapability -Online | where Name -like '*SSH*'
componente OpenSSH
Figura 1. Găsiți componentele OpenSSH din sistemul dvs.

Figura 1 arată că software-ul client OpenSSH este preinstalat.

va trebui să utilizați Windows PowerShell pentru instalare, cu excepția cazului în care descărcați modulul WindowsCompatibility pentru PowerShell Core. Apoi, puteți importa modulul de administrare și gestionare a imaginilor de implementare din Windows PowerShell și puteți rula comenzile în PowerShell Core.

Instalați caracteristica serverului:

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

fișierele SSH se instalează în C:\Windows\System32\OpenSSH dosar.

descărcați OpenSSH de la GitHub

începeți prin descărcarea celei mai recente versiuni de la GitHub. Cea mai recentă versiune a instrucțiunilor de instalare se află la acest link.

după finalizarea descărcării, extrageți fișierul zip în C:\Program fișiere\dosar OpenSSH. Schimbați locația în C:\Program fișiere \ OpenSSH pentru a instala serviciile SSH:

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

Configurarea OpenSSH

după instalarea OpenSSH, efectuați câțiva pași suplimentari de configurare.

asigurați-vă că folderul OpenSSH este inclus în variabila de mediu calea sistemului:

  • C:\Windows\System32\OpenSSH\ dacă este instalat ca caracteristica opțională Windows
  • C:\Program fișiere \ OpenSSH \ dacă este instalat prin descărcarea OpenSSH

setați cele două servicii să pornească automat:

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

dacă ați instalat OpenSSH cu caracteristica opțională, atunci Windows creează o nouă regulă de firewall pentru a permite accesul SSH la intrare prin portul 22. Dacă ați instalat OpenSSH din Descărcare, creați regula firewall cu această comandă:

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

porniți serviciul SSHD pentru a genera tastele SSH:

Start-Service sshd

tastele SSH și fișierul de configurare se află în C:\ProgramData\ssh, care este un dosar ascuns. Shell-ul implicit utilizat de SSH este shell-ul de comandă Windows. Acest lucru trebuie să se schimbe la PowerShell:

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

acum, când vă conectați la sistem prin SSH, PowerShell Core va porni și va fi shell-ul implicit. De asemenea, puteți face shell-ul implicit Windows PowerShell, dacă doriți.

există o eroare în OpenSSH pe Windows. Nu funcționează cu căi cu un spațiu, cum ar fi calea către executabilul PowerShell Core! Soluția este de a crea o legătură simbolică care creează o cale pe care OpenSSH o poate folosi:

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

în fișierul sshd_config, dez-comentați următoarele linii:

PubkeyAuthentication yes
PasswordAuthentication yes

adăugați această linie înainte de alte linii de subsistem:

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

Acest lucru spune OpenSSH pentru a rula PowerShell Core.

comentați linia:

AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

după salvarea modificărilor în fișierul sshd_config, reporniți serviciile:

Restart-Service sshd
Start-Service ssh-agent

trebuie să reporniți serviciul sshd după orice modificare a fișierului de configurare.

folosind PowerShell SSH remoting

folosind remoting peste SSH este foarte similar cu remoting peste WS-MAN. Puteți accesa sistemul de la distanță direct cu Invoke-Command:

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

veți primi o solicitare pentru parola, care nu va fi afișată pe măsură ce o tastați.

dacă este prima dată când vă conectați la sistemul de la distanță prin SSH, atunci veți vedea un mesaj similar cu acesta:

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

tastați da și apăsați Enter.

puteți crea o sesiune de remoting:

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

și apoi să o utilizați:

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

puteți introduce o sesiune de remoting OpenSSH folosind Enter-PSSession în același mod ca o sesiune WS-MAN. Puteți introduce o sesiune existentă sau puteți utiliza parametrul HostName pe Enter-PSSession pentru a crea sesiunea interactivă.

nu puteți deconecta o sesiune bazată pe SSH; aceasta este o tehnică WS-MAN.

puteți utiliza sesiunile ws-MAN și SSH pentru a gestiona mai multe computere, așa cum se arată în Figura 2.

informațiile sesiunii arată diferitele mecanisme de transport-WS-MAN și, respectiv, SSH-și punctul final utilizat de fiecare sesiune.

sesiuni de administrare la distanță
Figura 2. Utilizați sesiunile WS-MAN și SSH împreună pentru a gestiona mașinile la distanță.

dacă vă uitați atent la Figura 2, veți observa că nu a existat nicio solicitare pentru parola din sesiunea SSH, deoarece sistemul a fost configurat cu autentificare bazată pe chei SSH.

utilizarea autentificării bazate pe chei SSH

deschideți o sesiune PowerShell ridicată. Schimbați locația la .folderul ssh din zona dvs. de utilizator:

Set-Location -Path ~\.ssh

generați perechea de chei:

ssh-keygen -t ed25519

Adăugați fișierul cheie în agentul SSH de pe mașina locală:

ssh-add id_ed25519

după ce ați adăugat cheia privată în SSH-agent, faceți o copie de rezervă a cheii private într-o locație sigură și ștergeți cheia din mașina locală.

copiați id_ed25519.fișier pub în .dosar ssh pentru contul de utilizator de potrivire pe serverul de la distanță. Puteți crea un astfel de cont dacă este necesar:

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

pe mașina de la distanță, copiați conținutul fișierului cheie în fișierul authorized_keys:

scp id_ed25519.pub authorized_keys

fișierul authorized_keys are nevoie de permisiunile modificate:

  • Deschideți File Explorer, faceți clic dreapta pe authorized_keys și navigați la Properties – Security – Advanced
  • Faceți clic pe Dezactivare moștenire.
  • selectați conversia permisiunilor moștenite în permisiuni explicite pentru acest obiect.
  • eliminați toate permisiunile, cu excepția sistemului și a contului dvs. de utilizator. Ambele ar trebui să aibă control deplin.
Introducere în SSH cu miez PowerShell.

veți vedea referințe la utilizarea modulului OpenSSHUtils pentru a seta permisiunile, dar există o eroare în versiunea din galeria PowerShell care face fișierul authorized_keys inutilizabil.

reporniți serviciul sshd pe aparatul de la distanță.

acum vă puteți conecta la aparatul de la distanță fără a utiliza o parolă așa cum se arată în Figura 2.

Dacă vă conectați la o mașină non-domeniu de la o mașină din domeniu, atunci trebuie să utilizați parametrul nume de utilizator După activarea autentificării perechilor de chei:

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

aveți nevoie de numele de utilizator de pe mașina de la distanță pentru a se potrivi cu numele de utilizator de domeniu. Nu vi se va solicita o parolă.

WS-MAN sau SSH remoting?

ar trebui să utilizați ws-MAN sau SSH bazate pe remoting? Ws-MAN remoting este disponibil pe toate sistemele Windows și este activat în mod implicit pe Windows Server 2012 și versiunile ulterioare de server. Ws-MAN remoting are unele probleme, în special problema double hop. WS-MAN are nevoie, de asemenea, de muncă suplimentară pentru sistemele de la distanță la non-domeniu.

SSH remoting este disponibil numai în PowerShell Core; Windows PowerShell este limitat la ws-MAN remoting. Este nevoie de o cantitate semnificativă de lucru pentru a instala și configura SSH remoting. Documentația nu este la fel de bun ca acesta trebuie să fie. Avantajele SSH remoting sunt că puteți accesa cu ușurință mașini non-domeniu și sisteme non-Windows unde SSH este standardul pentru accesul la distanță.

Lasă un răspuns

Adresa ta de email nu va fi publicată.