在 Windows 上为 Jenkins 配置 SSH 代理插件

zip*_*ova 5 windows sh ssh-agent jenkins jenkins-pipeline

我正在尝试在 Windows 安装的 Jenkins (v2.103) 上配置 SSH 代理插件 (v1.15),以便能够通过 ssh 向远程计算机发出命令。

我已经安装了该插件,并在 Jenkins Credentials 中添加了一个条目(如下所示),其中包含可以登录远程计算机(主机名:corp-wfdemo)的私钥和密码。我已经确认此密钥可用于验证运行 Jenkins 的用户。

詹金斯的凭证

我创建了一个 Pipeline 项目并添加了这个 Groovy 脚本来测试 ssh:

node ('ssh') {
    stage ('test') {
        sshagent(['corp-wfdemo']) {
            sh 'ls -la'
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Jenkins大师有这个标签ssh。这是一台安装了 Git Bash (MINGW64) 的 Windows Server 2012 计算机。

当我尝试运行此作业时,尝试查找某些自动生成的askpass.sh 脚本时失败。这是输出:

詹金斯作业输出

有人可以帮忙吗?提前致谢!

另外,每次我尝试运行此作业时,ssh-agent都会生成一个新实例,但不会终止,留下这样的混乱:

ssh 代理进程

Hen*_*eld 0

我已经在 Windows 上使用 Git 很长时间了,并且我一直在努力解决同样的问题。当使用 github 或其他远程 ssh 存储库时,我希望能够打开多个窗口,但让它们共享同一个 ssh 代理。

以下是我称之为assure_ssh_agentGit Bash 的 shell 函数的完整内容。在您运行的每个独立会话中获取其定义。我的~/.profile.

. ~/ssh-agent.sh
assure_ssh_agent
Run Code Online (Sandbox Code Playgroud)

定义函数后,您可以通过 ssh 添加密钥文件,或者,如果您在 中定义了密钥文件列表.ssh/keylist,则只需运行addkeys,这将在默认情况下将所有密钥文件加载到代理中 10 小时,这对于正常的工作日和较长的午休时间。

工作原理:该脚本维护文件中的共享状态.ssh/pid_store。如果assure_ssh_agent()找不到有效的 pid,它将启动一个新代理,并在其中写入其 pid 和套接字,用于任何后续会话。


内容ssh-agent.sh

. ~/ssh-agent.sh
assure_ssh_agent
Run Code Online (Sandbox Code Playgroud)