Visualizzazione post con etichetta Enter-PSSession. Mostra tutti i post
Visualizzazione post con etichetta Enter-PSSession. Mostra tutti i post

lunedì 20 marzo 2023

PowerShell: Eseguire comandi su un sistema remoto

Il sistema operativo Windows 10 integra diversi strumenti per l'accesso remoto e sono disponibili anche numerosi strumenti di terze parti. La funzione di accesso remoto è molto utile ma può rappresentare un rischio per la sicurezza. Per questo motivo bisogna prestare attenzione che tali strumenti vengano utilizzati correttamente e solo dalle persone precedentemente abilitate. La maggior parte degli strumenti utilizzati per l'accesso remoto, tra cui anche PowerShell, richiede l'abilitazione da parte dell'utente per poter essere utilizzati.

PowerShell rappresenta uno strumento molto potente in ambiente Windows grazie al supporto completo del Common Information Model (CIM), all'accesso a Windows Management Instrumentation (WMI) e alle API .NET e Component Object Model (COM). Una delle caratteristiche più importanti per gli amministratori Windows, è probabilmente la possibilità di eseguire comandi PowerShell su sistemi remoti.

Fin dalle prime versioni di PowerShell, Microsoft ha aggiunto il supporto per l'esecuzione di cmdlet su sistemi remoti utilizzando il parametro -ComputerName (una funzionalità di .Net). La documentazione Microsoft per l'accesso remoto tramite -ComputerName indica che questa funzionalità di accesso remoto, in determinati cmdlet PowerShell, utilizza "diversi protocolli di comunicazione". Negli ambienti moderni in cui è consentito solo un accesso limitato a SMB, l'accesso remoto con alcuni cmdlet potrebbe non funzionare. Microsoft, invece, ha indicato che l'accesso remoto in PowerShell sarà realizzato con il protocollo WS-Management utilizzando HTTPS e il protocollo Simple Object Access Protocol (SOAP) utilizzando strutture dati XML.

I comandi messi a disposizione da Microsoft per l'accesso remoto ai sistemi Windows con PowerShell sono:
  • Enable-PSRemoting/Disable-PSRemoting
  • Enter-PSSession/Exit-PSSession
  • Invoke-Command
  • New-PSSession/Remove-PSSession

Nei sistemi Windows 10 e Windows 11, a differenza di Windows Server 2012R2 e successivi, l'accesso remoto PowerShell è disattivato per impostazione predefinita. Per attivare tale funzionalità è necessario eseguire il comando 
 Enable-PSRemoting -Force  
da PowerShell avviato come amministratore.

Il comando apporterà diverse modifiche alla configurazione locale di Windows:
  • Avvia il servizio WinRM, in ascolto sulla porta TCP 5985.
  • Modifica l'avvio automatico di WinRM.
  • Apporta modifiche al firewall di Windows per consentire l'accesso alla porta TCP 5985.
  • Configura la funzione di accesso remoto di WS-Management per l'uso di PowerShell.
PowerShell, Enable-PSRemoting
FIG 1 - PowerShell, Enable-PSRemoting
Nota: il remoting di PowerShell è accessibile solo quando il firewall di Windows è attivato su Rete di dominio o Rete privataWinRM non è disponibile per l'accesso alla rete pubblica.
Windows Firewall
FIG 2 - Windows Firewall
Per accedere alla sessione PowerShell remota, è necessario disporre dell'accesso come amministratore al sistema remoto. Ciò significa che l'utente collegato ha accesso come amministratore al sistema remoto o che, se il sistema fa parte di un dominio, si dispone dell'accesso come amministratore di dominio.

Per l'accesso remoto a PowerShell è possibile eseguire il cmdlet Enter-PSSession e specificate il nome dell'host di destinazione o l'indirizzo IP usando -ComputerName
 Enter-PSSession -ComputerName PC2

Se l'utente collegato non ha i privilegi di accesso remoto e si desidera utilizzare credenziali alternative, salvare le credenziali in una variabile con Get-Credential quindi fornire la variabile come argomento a Enter-PSSession utilizzando l'opzione -Credential
 $cred = Get-Credential  
 Enter-PSSession -ComputerName PC2 -Credential $cred  

Per terminare la sessione remota di PowerShell e tornare l sistema host, eseguire 
Exit-PSSession