Come mantenere le credenziali in una sessione remota di Powershell?


13

Ho una condivisione file di Azure e vorrei usarla dalle mie macchine virtuali di Azure, dopo aver persistito le credenziali nelle macchine virtuali con cmdkey e aver effettuato il montaggio con uso netto. Questo è stato testato eseguendo questi comandi in una sessione Powershell locale su Windows Server 2012 R2.

Ma devo aggiungere questo passaggio a uno script di distribuzione di Azure. Uno script di Azure Powershell viene eseguito dal mio laptop, si connette alla sottoscrizione di Azure e crea le VM da zero, usando molte variabili.

Si è deciso di usare Invoke-Command per passare le variabili dallo script Azure Powershell a una sessione Powershell remota nella VM appena creata.

$Session = New-PSSession -ConnectionUri $Uri -Credential $DomainCredential

$ScriptBlockContent = { 
Param ($Arg1,$Arg2,$Arg3)
cmdkey /add:$Arg1 /user:$Arg2 /pass:$Arg3}

Invoke-Command -Session $Session -ScriptBlock $ScriptBlockContent -ArgumentList ($Share,$AccountName,$Key)

E l'errore:

PS C:\> Invoke-Command -Session $Session -ScriptBlock $ScriptBlockContent -ArgumentList ($Share,$AccountName,$Key)
CMDKEY: Credentials cannot be saved from this logon session.

Sostituito con cmdkey / list per verificare la sintassi e non si verificano errori.

PS C:\> Invoke-Command -Session $Session -ScriptBlock $ScriptBlockContent
Currently stored credentials:
* NONE *

Si è verificato un problema simile (e non è stato possibile risolverlo) con il modulo PowerShell di Windows Update (Invoke-WUInstall), che funziona perfettamente su una sessione Powershell locale sulla VM, ma non si aggiorna quando avviato tramite Powershell remoto.

Qualche modo per aggirare questo?

Risposte:


2

A causa del modo in cui Windows gestisce l'autenticazione non è possibile utilizzare CMDKEY per impostare le credenziali tramite una sessione remota di PowerShell, deve essere eseguito in modo interattivo quando si utilizza CMDKEY.

Per citare Don Jones da un thread in cerca di una risposta simile alla tua:

Questa è una limitazione del comando Cmdkey - non proprio una cosa di PowerShell. Ma è legato al modo in cui Remotig gestisce le credenziali. La sessione remota in realtà non ha le credenziali, riceve un ticket delegato, quindi non c'è alcun token da salvare effettivamente. Questo è tutto in base alla progettazione e non è qualcosa che puoi riconfigurare.


2

È possibile utilizzare PsExec.exe di Sysinternal se non si desidera utilizzare l'attività pianificata. Normalmente, quando si avvia una sessione di PowerShell, viene eseguita nel servicesprocesso (è possibile confermarlo eseguendo il query sessioncomando sul computer remoto) anziché l'utente locale che non riesce cmdkey.

Per ovviare a questo, dobbiamo eseguire cmdkey.exe nel processo dell'utente locale che può essere fatto usando PsExec.exe's -iflag che

Esegui il programma in modo che interagisca con il desktop della sessione specificata sul sistema remoto. Se non viene specificata alcuna sessione, il processo viene eseguito nella sessione della console.

Ora, la sfida è ottenere l'ID sessione dell'utente locale sul computer remoto. L'ho raggiunto eseguendo il query sessioncomando che fornisce un elenco di sessioni attive sulla macchina. Una delle possibili soluzioni è:

$processId = Invoke-Command $session -ScriptBlock  {
param($user)
    $sessions = query session $user;
    return $sessions[1].split(" ", [System.StringSplitOptions]::RemoveEmptyEntries)[2];

} -ArgumentList ($user)

Qui $usercontiene il nome utente dell'utente locale sul computer remoto.

Una volta ottenuto l'id della sessione, puoi semplicemente eseguirlo

PsExec \\<computer_name> -u <local_user_name> -p <password> -h -i $processId cmdkey.exe /generic:testtt /user:userr /pass:pass

Nota:

  1. Ci possono essere modi migliori per ottenere l'id di sessione di un utente sul computer remoto.
  2. In questo momento, mentre eseguo PsExec, sto di nuovo facendo una connessione con il sistema remoto che può essere evitato (non ho ancora testato).
  3. L'utente che esegue il comando dovrebbe avere accesso come amministratore sul computer remoto.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.