2012-11-27 13 views
6

Sto tentando di eseguire uno script PowerShell su un computer remoto (Windows 2008 Server R2). Il seguente codice funziona alla grande se eseguito direttamente da PowerShell. (Cioè tutto è impostato correttamente, i servizi WinRM sono in esecuzione, gli host si fidano l'un l'altro, l'accesso è corretto ...)Accesso remoto con PowerShell e Jenkins

Tuttavia, quando eseguo lo stesso codice esatto da un'istanza di Jenkins (in esecuzione sulla stessa macchina in cui testato) Ricevo un errore di connessione PSSessionStateBroken,. (Non postare un errore completo perché è in tedesco sulla mia macchina.)

Suppongo che significhi che Jenkins sta usando PowerShell in modo diverso o ha diverse impostazioni di PowerShell/WinRM o privilegi insufficienti. Qualche idea?

$computer = "<some ip>" 
$user = "Administrator" 
$password = "<secretpassword>" 
$securepassword = ConvertTo-SecureString -String $password -AsPlainText -Force 
$cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $user, $securepassword 
Invoke-Command -ComputerName $computer -ScriptBlock { Get-ChildItem C:\ } -Credential $cred 

Edit: Siamo riusciti a risolvere il problema eseguendo servizio Jenkins come amministratore. Funziona per me, ma non mi sembra giusto ...

risposta

1

Le credenziali dell'account di servizio Jenkins sono autorizzate ad accedere in remoto al computer di destinazione?

Vorrei utilizzare ProcMon per controllare il sistema di destinazione quando si accede dall'account amministratore e dall'account di servizio regolare. Vedrai una differenza e scommetto che sarà ovvio! In bocca al lupo!

3

A partire da marzo 2014, Jenkins installa il servizio Jenkins per l'esecuzione come utente LocalSystem (ad esempio, NT AUTHORITY\SYSTEM). L'account LocalSystem accesses the network using the computer account.

Ad esempio, Jenkins su un host denominato JENKINSSERVER si connette a macchine remote utilizzando l'account computer MYDOMAIN\JENKINSSERVER$ nel dominio MYDOMAIN di Active Directory.

Questo significa che è necessario aggiungere l'account MYDOMAIN\JENKINSSERVER$ come membro del gruppo locale BUILTIN\Administrators sul TARGETSERVER:

NET LOCALGROUP "Administrators" "MYDOMAIN\MYSERVER$" /add

caveat emptor: Questo garantisce alcun codice in esecuzione come LocalSystem o NetworkService sul Host MYSERVER per l'esecuzione di comandi remoti su TARGETSERVER come amministratore. Potrebbe essere meglio creare un utente di dominio specifico solo per questo servizio per limitare i diritti di amministrazione al solo servizio Jenkins.

Problemi correlati