Удаленный доступ с Powershell и Jenkins

Я пытаюсь запустить сценарий powershell на удаленной машине (Windows 2008 Server R2). Следующий код отлично работает при выполнении непосредственно из powershell. (т.е. все настроено правильно, сервисы WinRM запущены, хосты доверяют друг другу, логин правильный...)

Однако когда я выполняю точно такой же код из экземпляра Jenkins (работающего на том же компьютере, на котором я тестировал), я получаю ошибку соединения PSSessionStateBroken, . (Не публикую полную ошибку, потому что на моей машине она на немецком языке.)

Я полагаю, это означает, что Дженкинс использует powershell по-другому, или имеет другие настройки powershell/winrm или недостаточные привилегии. Есть идеи?

$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

Редактировать: удалось исправить это, запустив службу jenkins от имени администратора. Работает для меня, но не чувствует себя хорошо...


person MadDave    schedule 27.11.2012    source источник


Ответы (2)


По состоянию на март 2014 года Jenkins устанавливает службу Jenkins для запуска от имени пользователя LocalSystem (т. е. NT AUTHORITY\SYSTEM). Учетная запись LocalSystem подходит к сети, используя учетная запись компьютера.

Например, Jenkins на хосте с именем JENKINSSERVER подключается к удаленным компьютерам, используя учетную запись компьютера MYDOMAIN\JENKINSSERVER$ в домене MYDOMAIN Active Directory.

Это означает, что вам нужно добавить учетную запись MYDOMAIN\JENKINSSERVER$ в качестве члена локальной группы BUILTIN\Administrators на TARGETSERVER:

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

Caveat Emptor: позволяет любому коду, выполняющемуся как LocalSystem или NetworkService на хосте MYSERVER, выполнять удаленные команды на TARGETSERVER в качестве администратора. Возможно, вам лучше создать конкретного пользователя домена только для этой службы, чтобы ограничить права администратора только одной службой Jenkins.

person Steve Jansen    schedule 16.03.2014

Есть ли у вашей служебной учетной записи Jenkins разрешение на удаленный вход на целевой компьютер?

Я бы использовал ProcMon для наблюдения за целевой системой при доступе к учетной записи администратора и обычной учетной записи службы. Вы увидите разницу, и я уверен, что она будет очевидна! Удачи!

person northben    schedule 13.12.2012