6

我正在尝试在远程(Windows 2008 Server R2)机器上运行一个 powershell 脚本。以下代码在直接从 powershell 执行时效果很好。(即一切设置正确,WinRM 服务正在运行,主机相互信任,登录正确...)

但是,当我从 Jenkins 实例(在我测试的同一台机器上运行)执行完全相同的代码时,我得到一个PSSessionStateBroken连接失败,. (没有发布完整的错误,因为它在我的机器上是德语。)

我想这意味着 Jenkins 使用不同的 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 服务来修复它。对我有用,但感觉不对...

4

2 回答 2

4

自 2014 年 3 月起,Jenkins 安装 Jenkins 服务以作为 LocalSystem 用户(即 NT AUTHORITY\SYSTEM)运行。LocalSystem 帐户使用计算机帐户访问网络

例如,一台名为的主机上的 Jenkins使用Active Directory 域中的计算机帐户JENKINSSERVER连接到远程机器。MYDOMAIN\JENKINSSERVER$MYDOMAIN

这意味着您需要将MYDOMAIN\JENKINSSERVER$帐户添加为BUILTIN\Administrators本地组的成员TARGETSERVER

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

警告 EmptorTARGETSERVER :这允许在 MYSERVER 主机上作为 LocalSystem 或 NetworkService 执行的任何代码以管理员身份运行远程命令。您最好只为该服务创建一个特定的域用户,以将管理员权限限制在单个 Jenkins 服务中。

于 2014-03-16T13:52:15.163 回答
1

您的 Jenkins 服务帐户凭据是否有权远程登录到目标计算机?

当管理员帐户和常规服务帐户访问时,我会使用 ProcMon 监视目标系统。你会看到不同,我敢打赌这会很明显!祝你好运!

于 2012-12-13T02:42:24.663 回答