【发布时间】:2018-02-26 12:59:12
【问题描述】:
我正在自动化构建过程。该过程需要将应用程序部署到服务器上,部署后必须执行一些脚本来共享和提供服务器上的权限。当我通过 powershell 通过域用户登录时脚本运行。我使用 Jenkins 进行 CI/CD 过程。我想包含我的域凭据以在服务器上运行脚本。我也使用了活动目录插件,并且可以使用我的域凭据登录,但我仍然无法与服务器建立远程连接。
我的脚本是
Enter-PSSession -ComputerName ATKT-WS-20
Invoke-Expression -Command .\FolderSharingScript.ps1
Enter-PSSession:连接到远程服务器 ATKT-WS-20 失败并显示以下错误消息:WinRM 无法 处理请求。使用 Kerberos 身份验证时出现以下错误,错误代码为 0x8009030e:A 指定的登录会话不存在。它可能已被终止。
可能的原因有: - 指定的用户名或密码无效。 -Kerberos 在没有指定身份验证方法和用户名时使用。 -Kerberos 接受域用户名,但不接受本地用户名。 - 远程计算机名称和端口的服务主体名称 (SPN) 不存在。 -客户端和远程计算机在不同的域中,两个域之间没有信任。 检查上述问题后,请尝试以下操作: - 检查事件查看器以获取与身份验证相关的事件。 -改变认证方式;将目标计算机添加到 WinRM TrustedHosts 配置设置或 使用 HTTPS 传输。 请注意,TrustedHosts 列表中的计算机可能未经过身份验证。
我还在trustedhosts 中添加了机器名称。如何在 Jenkins 作业中包含域凭据?
【问题讨论】:
-
顺便说一句,无论凭据问题如何:
Enter-PSSession用于交互式使用。相反,要么将Invoke-Command -ComputerName用于一次性命令,要么使用New-PSSession创建会话对象以用于多个Invoke-Command -Session调用。 -
不,不起作用
-
我知道:这就是为什么我将我的评论归类为 aside 并说“无论凭据问题如何”:这是您需要做出的调整,但它本身就是不足以解决您的问题;您仍然需要解决凭据问题 - 请参阅下一条评论。
-
一些高级指针:(a) 以域用户身份运行 Jenkins 服务(可能不是一个好主意),(b) 在目标机器上安装 Jenkins 代理并在上下文中运行它域用户,然后使用 Jenkins PowerShell 插件直接运行感兴趣的代码,(c) 使用 DPAPI 在运行 Jenkins 服务的用户的上下文中将凭据保存到文件中(这可能是一个挑战默认
NT AUTHORITY\SYSTEM(LocalSystem)帐户),然后构造一个[pscredential]实例传递给-Credential; (d) 考虑使用带有私钥文件的 SSH。 -
啊,是的。它现在工作。非常感谢~
标签: windows powershell jenkins dns continuous-deployment