PowerShell Set-Location to file server PermissionDenied under Enter-PSSession
Nella nostra azienda, abbiamo un file server da cui voglio eseguire script per aggiornare i computer remoti.
Tutti i computer sono in un dominio.
Quando sono sul mio computer ed eseguo (PowerShell viene eseguito come amministratore o meno)
Set-Location -Path "\\fileserver.company.org\scripts_folder\"
Funziona
Quando sono sul computer remoto (stessa sottorete) lo stesso utente funziona lo stesso comando sopra.
Ma quando lo faccio
Enter-PSSession -ComputerName PC-NAME -Credential my_username
Set-Location -Path "\\fileserver.company.org\scripts_folder\"
Il Set-Location ritorna
Set-Location : Access is denied
+ CategoryInfo : PermissionDenied: (\\fileserver.company.org\scripts_folder\:String) [Set-Location], Unauthoriz
edAccessException
+ FullyQualifiedErrorId : ItemExistsUnauthorizedAccessError,Microsoft.PowerShell.Commands.SetLocationCommand
Perché l'accesso viene negato? Con quale utente è in esecuzione PowerShell quando io Enter-PSSession
?
Risposte
A me questo sembra un double hop
orsecond hop problem
Il "problema del secondo salto" si riferisce a una situazione come la seguente:
- Hai effettuato l'accesso a ServerA.
- Da ServerA, si avvia una sessione remota di PowerShell per connettersi a ServerB.
- Un comando eseguito su ServerB tramite la sessione di PowerShell Remoting tenta di accedere a una risorsa su ServerC.
- L'accesso alla risorsa su ServerC è negato, perché le credenziali utilizzate per creare la sessione di PowerShell Remoting non vengono passate da ServerB a ServerC.
Nel tuo caso il tuo computer sarebbe ServerA, il computer in cui accedi alla sessione è ServerB e il file server è ServerC
Se i tuoi computer sono su WMF 3.0 o successivo, puoi creare un PSSessionConfiguration
con le credenziali ad esso legate. È quindi possibile utilizzare questa configurazione quando si crea una sessione remota su ServerB
Per creare la configurazione, eseguire questo comando in un PowerShell con privilegi elevati su ServerB e utilizzare una credenziale che disponga dell'autorizzazione per accedere alle risorse su ServerC
Register-PSSessionConfiguration -Name AdminCredConfig -RunAsCredential 'domain\mydomainaccount' -Force
Quindi è possibile specificare il creato PSSessionConfiguration
quando si accede alla sessione
Enter-PSSession -ComputerName ServerB -Credential my_username -ConfigurationName AdminCredConfig
Set-Location -Path "\\fileserver.company.org\scripts_folder\"
Questo è il modo più semplice per risolvere il tuo problema secondo me. Tuttavia, esistono diversi modi per superare il problema del secondo hop, ad esempio CredSSP. puoi leggere su di loro in MS Docs
Per i computer che non sono su WMF 3.0 o versioni successive, dovrai passare le credenziali all'interno del blocco Invoke-Command Script , che è anche facile da ottenere ma non è molto elegante e richiede una codifica scomoda.
In alternativa, cerca un modo in cui non devi nemmeno preoccuparti del problema del secondo salto.
Ho trovato la radice del mio problema. Si chiama "problema del secondo salto"
Il "problema del secondo salto" si riferisce a una situazione come la seguente:
Hai effettuato l'accesso a ServerA.
Da ServerA, si avvia una sessione remota di PowerShell per connettersi a ServerB.
Un comando eseguito su ServerB tramite la sessione di PowerShell Remoting tenta di accedere a una risorsa su ServerC.
L'accesso alla risorsa su ServerC è negato, perché le credenziali utilizzate per creare la sessione di PowerShell Remoting non vengono passate da ServerB a ServerC.
https://docs.microsoft.com/en-us/powershell/scripting/learn/remoting/ps-remoting-second-hop?view=powershell-7