通过Powershell和Jenkins进行远程访问

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服务,我成功解决了这个问题。对我来说有效,但感觉不太合适...

2个回答

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

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

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

NET LOCALGROUP "Administrators" "MYDOMAIN\ MYSERVER$" /add 注意:这授予在MYSERVER主机上以LocalSystem或NetworkService身份执行的任何代码作为管理员在TARGETSERVER上运行远程命令的权限。 您最好为此服务创建一个特定的域用户,以仅限制管理员权限为单个Jenkins服务。

这是一个糟糕的想法。 - bpeikes

1

你的Jenkins服务账户凭据是否具有远程登录目标计算机的权限?

我会使用ProcMon来观察被管理员帐户和常规服务帐户访问时的目标系统。您将看到差异,而且我敢打赌,它会很明显!祝你好运!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接