Jenkins ssh 远程主机和奴隶上的密钥文件路径差异

Jenkins ssh remote hosts and keyfile path differences on slaves

我们有一个 Jenkins 服务器,它使用 SSH plugin 在全局 Jenkins 配置中配置 SSH 远程主机。这些 ssh 连接使用 public/private 密钥对远程主机进行身份验证。

然后我们在构建步骤中使用这些配置的 SSH 远程主机 "Execute shell script on remote host using ssh"(我相信这也是 SSH 插件的一部分)在许多作业中。

我遇到的问题是,在使用 ssh 的远程主机上使用执行 shell 脚本的任何作业都必须在 Windows 从机上 运行,因为我还没有找到了一种将某种相对路径放入密钥文件的方法。

在 windows 上,文件将位于:C:\Users\<username>\.ssh\ 在 linux 上,文件将位于:/home/<username>/.ssh/

我尝试了很多次使用系统环境变量的迭代,在节点配置页面上设置环境变量并将它们用作密钥文件路径的一部分,但都没有成功。

我错过了什么吗?有没有更好的方法来处理它。必须有一种方法来管理密钥文件位置和 ssh 远程主机之间的差异。

不幸的是,我认为没有办法指定相对路径——配置的密钥文件路径必须在每个构建从站上都相同。我知道远非理想。

我不确定 Windows 会如何处理它,但如果您将文件放在 c:\ssh\whatever.key/ssh/whatever.key 分别用于 Windows 和 Linux 机器。

无论如何,该插件已被修改为使用 Jenkins Credentials 插件,它允许您管理 username/password 或来自 Jenkins UI 的基于私钥的凭证,而无需将文件放在磁盘上。

然而,虽然这已经集成到 SSH 插件中,但还没有包含此功能的新版本,但看起来应该会出现 "soon"。

因此,如果解决方法不起作用,您可以尝试:

  • 等待新版本
  • Post 上 jenkinsci-users list 询问新版本
  • 下载并安装一个recent build的插件
    • (虽然我会在尝试之前小心备份现有的作业配置;或者在单独的 Jenkins 实例上尝试)