Come Risolvere il Problema del Double-Hop di PowerShell: Una Guida Completa

Hai mai provato ad accedere a una risorsa remota all’interno di una sessione PowerShell Remoting solo per imbatterti in un frustrante blocco di accesso negato? Questo problema comune, noto come il problema del “double-hop”, ti impedisce di accedere a una seconda macchina remota dalla tua sessione attuale.

La buona notizia? Ci sono modi per risolvere il problema del double-hop senza configurazioni eccessivamente complesse. In questo tutorial, costruirai una sessione personalizzata che gestisce senza problemi l’autenticazione, risparmiandoti tempo e fatica pur mantenendo la sicurezza.

Supera i double-hop con configurazioni di sessione e semplifica il tuo flusso di lavoro!

Eseguire PowerShell come un Utente Differente

Se stai lavorando con script che si connettono a risorse remote, potresti incontrare il problema del double-hop. Questo problema si verifica quando le tue credenziali non riescono ad autenticarsi oltre il primo hop in una connessione remota.

Ad esempio, considera uno script che conta le sottodirectory su un computer remoto utilizzando un percorso UNC:

(Get-ChildItem -Path \\SRV2\c$ -Directory).Count

Se sei connesso a un utente che non ha il permesso di accedere a una risorsa, puoi eseguire PowerShell sotto un altro account utente:

  1. Cerca PowerShell nel menu Start.
  2. Fai clic destro sul collegamento di PowerShell e seleziona Apri posizione file.
  3. In Esplora file, tieni premuto Shift, fai clic destro sul collegamento e seleziona Esegui come utente differente.
  4. Inserisci le credenziali di un utente con i permessi necessari.

Dopo aver avviato PowerShell come un utente differente, il comando dovrebbe ora avere successo:

(Get-ChildItem -Path \\SRV2\c$ -Directory).Count

Consiglio: Se esegui frequentemente comandi con diverse credenziali, considera di utilizzare il cmdlet Start-Process con il parametro -Credential. Questo approccio ti consente di aprire nuove sessioni di PowerShell direttamente dalla console con credenziali alternative.


Testare Connessioni Remote

Potresti accedere con successo a una risorsa remota localmente, come una cartella condivisa, quando lavori con più sistemi remoti. Ma poi hai scoperto che lo stesso comando produce un errore di “accesso negato” quando eseguito (da un secondo computer remoto).

Questa incoerenza può essere confusa, soprattutto quando sei sicuro che le tue credenziali abbiano permessi sufficienti.

Per testare le tue connessioni remote, stabilisci una sessione con un altro computer:

Enter-PSSession -ComputerName SRV3

Una volta connesso, prova a eseguire lo stesso comando sulla seconda macchina:

(Get-ChildItem -Path \\SRV2\c$ -Directory).Count

Questo test spesso risulta in un errore di “accesso negato”, anche se usi un account con permessi.

Conferma il tuo utente attuale con il seguente comando:

whoami

Questo comportamento (double-hop) si verifica perché PowerShell non passa le tue credenziali al passaggio successivo. Questo meccanismo è una funzione di sicurezza integrata nell’autenticazione Kerberos, ma può essere un grande problema quando si gestiscono più sistemi.

Risolvere il Problema del Double-Hop con Configurazioni di Sessione

Una soluzione al problema del double-hop è creare una configurazione di sessione sulla macchina intermedia.

Inizia registrando una configurazione di sessione sul computer a cui ti stai connettendo, in questo caso, SRV3.

Il comando seguente:

  • Assegna un Nome alla configurazione della sessione (ad esempio, Admin).
  • Specifica l’account (RunAsCredential) sotto cui verranno eseguite le sessioni.
  • Assicura (Force) che la configurazione venga applicata e riavvia il servizio WinRM.
Invoke-Command -ComputerName SRV3 -ScriptBlock {
    Register-PSSessionConfiguration -Name Admin -RunAsCredential 'psforsysadmins.local\adam' -Force
}

PowerShell ti richiede la password per l’account RunAsCredential, che viene memorizzata in modo sicuro sulla macchina remota. Una volta registrata la configurazione, il servizio WinRM si riavvia e la sessione si chiude.

Con la configurazione in atto, ora puoi connetterti utilizzando il parametro ConfigurationName:

Invoke-Command -ComputerName SRV3 -ScriptBlock {
    (Get-ChildItem -Path \\SRV2\c$ -Directory).Count
} -ConfigurationName Admin

Questo comando esegue la stessa operazione di prima. Tuttavia, specifica la configurazione della sessione Admin, che viene eseguita sotto l’account admin specificato.


Consiglio: Limita l’accesso alla configurazione della sessione definendo permessi di accesso specifici per utenti o gruppi utilizzando il cmdlet Set-PSSessionConfiguration. In questo modo si assicura che solo gli utenti autorizzati possano sfruttare la configurazione.


Conclusione

In questa guida, hai visto e risolto il problema del doppio salto nel PowerShell Remoting. Configurare una sessione può risolvere il problema del doppio salto e garantire che le credenziali siano trasmesse in modo sicuro.

Questa soluzione è persistente, quindi puoi riutilizzare la configurazione anche dopo i riavvii, rendendola un approccio robusto per gestire sessioni PowerShell remote. Ora puoi gestire operazioni remote multi-hop con sicurezza e semplificare i flussi di lavoro senza compromettere la sicurezza.

Da qui, considera di esplorare opzioni di sicurezza avanzate, come limitare l’accesso alla sessione o implementare l’autenticazione basata su certificati. Questi miglioramenti possono ulteriormente rafforzare la tua configurazione di remoting mentre gestisci ambienti complessi in modo flessibile.

Source:
https://adamtheautomator.com/powershell-double-hop-fix/