使用Powershell和Jenkins进行远程访问

时间:2012-11-27 16:12:35

标签: powershell jenkins winrm

我正在尝试在远程(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 个答案:

答案 0 :(得分:4)

截至2014年3月,Jenkins安装Jenkins服务以作为LocalSystem用户运行(即NT AUTHORITY\SYSTEM)。 LocalSystem帐户accesses the network using the computer account

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

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

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

Caveat Emptor :这将授予在MYSERVER主机上作为LocalSystem或NetworkService执行的任何代码,以便以管理员身份在TARGETSERVER上运行远程命令。您可能最好只为此服务创建一个特定的域用户,以限制只有单个Jenkins服务的管理员权限。

答案 1 :(得分:1)

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

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