我正在设置一个新的 Jenkins 服务器。它将根据公司 AD 对用户进行身份验证。我们想到的大多数任务都需要登录到其他主机(通过 ssh)。
当用户登录时,Jenkins 是否可以配置为:
- 获取 Kerberos 票证 (
kinit
)。 - 使该票证(作为文件,由环境变量设置的位置)可供任何 Jenkins 作业使用由该用户运行-- 这样仍然可以通过
.k5users
/控制对其他主机的访问.k5login
。
我应该查看哪些附加组件/插件?
答案1
获得路边罚单应该相当容易,因为这基本上就是Kerberos SSO 插件确实如此。然而……
...您不太可能以令人满意的方式从您的工作内部访问路边票或用户凭证。
- 首先,如果可能的话,这将是一个巨大的安全风险,因为如果你可以创建一个以任意用户身份在远程机器上进行身份验证的作业,那么你就可以创建一个以任意用户身份进行身份验证的作业任何任意用户(已经拥有有效的路边票)到远程机器,这可能会允许用户编写自定义作业来以其他用户的身份进行身份验证。
- 其次,即使从技术上讲可行,也并不简单。根据我的经验,kerb ticket 存储在本地,即用于访问 Web UI 的客户端计算机上,而不是 Jenkins 服务器上。即使不是这样,Jenkins 也不会真正直接将触发作业的用户的个人资料暴露给作业本身。最终,所有 Jenkins 作业都由主节点和从节点上的 Jenkins 代理运行。触发作业的人或代理仅仅是——触发工作,而不是个人跑步它。当然,您可以获取触发作业的用户的信息(如果有的话)——作业也可以自动触发,例如通过 cron 作业。但这需要从您的 Jenkins 作业定义中进行一系列复杂的 API 调用,我甚至不确定如何从获取触发作业的用户的名称到他们的 kerb 票证。Kerberos SSO 插件 API 没有发布任何看似有用的东西。
在我看来,您可能想要一个普通的旧式 shell 脚本或类似脚本,而不是 Jenkins 作业。我知道 shell 脚本不会具有 Jenkins 作业的所有功能,但如果您想使用当前用户的凭据运行作业,那么 shell 脚本是更好的选择。