Nell’articolo Gestire PC in rete locale con PowerShell abbiamo visto che per un amministratore di sistema diventa semplicissimo collegarsi agli altri PC in rete locale e gestirli comodamente dalla propria macchina.
In quell’articolo abbiamo visto come abilitare e utilizzare il servizio Gestione remota Windows (WS-Management) integrato nel sistema operativo con i dati che tra server e client (e viceversa) fluivano però in chiaro, senza l’applicazione di alcun algoritmo crittografico.
Partendo da quanto già appreso, questa volta vediamo come amministrare i PC in rete locale sempre usando PowerShell ma attivando la cifratura dei pacchetti in transito con il protocollo HTTPS.
I passaggi che permettono di collegarsi ai PC della LAN via HTTPS sono addirittura ancora più semplici rispetto a quelli descritti nell’articolo citato in apertura.
Come gestire i computer in rete locale con PowerShell e il protocollo HTTPS: configurazione del sistema server
Ancora una volta, per semplicità chiamiamo “server” il sistema che deve essere amministrato a distanza attraverso la rete locale.
Su questo sistema bisognerà innanzi tutto aprire una finestra di Windows PowerShell con i diritti di amministratore (Windows+X
) e digitare quanto segue:
Verrà così creato un certificato digitale firmato in proprio che sarà sfruttato in seguito per confermare l'”identità” della macchina server.
Bisognerà quindi provvedere ad esportare la chiave pubblica associata a tale certificato. Per procedere si dovrà scrivere:
md C:\TEMP
Export-Certificate -Cert $Cert -FilePath C:\TEMP\CERT.cer
Il primo comando permette di creare una cartella C:\TEMP
: nel caso in cui tale percorso dovesse esistere già, si otterrà il messaggio d’errore “Esiste già un elemento con il nome specifico“. Ignorare l’errore.
Come nell’articolo citato nell’introduzione, basterà a questo punto digitare il comando:
Si può eventualmente usare la sintassi Enable-PSRemoting -SkipNetworkProfileCheck -Force
per evitare che il server risponda a tentativi di connessione in ingresso allorquando l’interfaccia di rete fosse configurata come Pubblica e non come Privata: Differenza tra rete pubblica e rete privata in Windows 10.
Dal momento che per default il servizio Gestione remota Windows (WS-Management) viene configurato per funzionare su protocollo HTTP – quindi con tutti i pacchetti dati inviati e ricevuti in chiaro -, i comandi seguenti consentiranno di disabilitare l’utilizzo di informazioni non crittografate:
Get-ChildItem WSMan:\Localhost\listener | Where -Property Keys -eq "Transport=HTTP" | Remove-Item -Recurse
Remove-Item -Path WSMan:\Localhost\listener\listener* -Recurse
Set-NetFirewallRule -DisplayName 'Gestione remota Windows (HTTP-In)' -Enabled False -PassThru | Select -Property DisplayName, Profile, Enabled
Dopo aver rimosso tutti i listener esistenti, basterà aggiungerne uno per il solo protocollo HTTPS:
Con l’utilizzo della variabile $Cert
si indica al servizio Gestione remota Windows (WS-Management) di usare il certificato autogenerato in precedenza.
A questo punto, come ultimi passaggi, si devono creare le regole firewall per accettare le connessioni crittografate (sulla porta TCP 5986):
Configurazione del client
Impostare la macchina che l’amministratore userà per gestire a distanza gli altri sistemi connessi in rete locale è semplicissimo.
È necessario, innanzi tutto, premere la combinazione di tasti Windows+X
quindi scegliere Windows PowerShell (amministratore).
Nella finestra di PowerShell si dovranno digitare i seguenti due comandi per configurare e avviare il servizio Gestione remota Windows (WS-Management):
Set-Service WinRM -StartupType 2 -PassThru
Start-Service WinRM -PassThru
Bisognerà quindi importare il file contenente la chiave pubblica del sistema server (copiandolo manualmente da tale macchina). Supponendo di aver memorizzato il file CERT.cer
sul desktop di Windows, bisognerà digitare da PowerShell:
A questo punto è possibile collegarsi via PowerShell e HTTPS all’altra macchina digitando:
Al posto di NOME-SERVER bisognerà ovviamente digitare il nome del server sostituendo NOME-UTENTE con il nome di un account presente sulla macchina server dotato dei privilegi amministrativi.
Nel caso in cui PowerShell dovesse visualizzare il messaggio “Il certificato SSL è firmato da un’Autorità di certificazione sconosciuta“, per risolvere il problema basterà digitare quanto segue:
$so=New-PSSessionOption -SkipCACheck
Enter-PSSession -ComputerName NOME-SERVER -UseSSL -Credential NOME-UTENTE -SessionOption $so
A questo punto apparirà il prompt della macchina remota e si potrà amministrarla (eseguendo comandi e script, PowerShell compresi) come se si fosse fisicamente seduti dinanzi ad essa.
Disattivare e riattivare la regola firewall in ingresso sui sistemi server
Nel caso in cui, successivamente, si volesse disattivare la gestione delle richieste di amministrazione provenienti dagli altri PC, basterà digitare disattivare la regola firewall in ingresso sulla macchina server:
Per riattivarla, basterà eventualmente usare il comando seguente:
Disattivare il servizio di gestione remota Windows sulla macchina client
Se in seguito si volesse disabilitare il servizio di gestione remota sulla macchina usata per amministrare altri computer in rete locale, sarà sufficiente aprire una finestra di PowerShell con i diritti amministrativi e usare alcuni semplici comandi:
Stop-Service WinRM -PassThru
Set-Service WinRM -StartupType Disabled -PassThru
Disinstallare il servizio di gestione remota sui server
La completa disinstallazione del servizio di gestione remota sui sistemi server è leggermente più articolata. Di seguito i comandi da impartire dalla finestra di PowerShell aperta con i diritti di amministratore:
Disable-PSRemoting -Force
Remove-Item -Path WSMan:\localhost\listener\listener* -Recurse
Stop-Service WinRM -PassThru
Set-Service WinRM -StartupType Disabled -PassThru
Set-NetFirewallRule -DisplayName 'Gestione remota Windows (HTTP-In)' -Enabled False -PassThru | Select -Property DisplayName, Profile, Enabled
Set-NetFirewallRule -DisplayName 'Windows Remote Management (HTTPS-In)' -Enabled False -PassThru | Select -Property DisplayName, Profile, Enabled
Set-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\policies\system -Name LocalAccountTokenFilterPolicy -Value 0