Windows / Linux自动密钥交换

时间:2014-09-04 14:08:58

标签: ssh build jenkins ssh-keys ssh-tunnel

我有一个构建盒,我用它来进行连续构建以及每晚运行单元测试。我正在使用Jenkins来构建/单元测试脚本,它运行在Windows机器上,因为我们的编译器是基于Windows的。

我们的一个企业解决方案使用带有rabbitmq的Python代码来交换消息,以便通过故障网络同步特定数据库表。我有单元测试来帮助验证更新是否正确发生。

为了对Python更新进行单元测试,我需要能够停止在我的Linux机器上运行的某些服务,然后在更新python代码后重新启动它们。我在Windows框和Linux框之间设置了密钥交换,这样我就不必在批处理脚本中输入密码了。

当我远程进入Windows框时,我可以成功运行批处理文件,该文件使用依赖于密钥交换的plink命令和putty的{​​{1}}(其中正在后台运行)。例如我使用plink从我的批处理文件中的命令行在Linux机器上执行命令。但是,当我尝试从Jenkins运行批处理文件时,批处理文件无法正常工作,因为在尝试运行pageant命令时会提示输入SSH密码。

我相信我目前的问题可以用两个问题来概括,我希望能够对其进行验证和纠正:

  1. 我认为Jenkins可能是以不同的用户身份运行或使用不同的系统凭据,因此无法像登录用户那样连接。如果是这种情况,我需要做什么,以便Jenkins可以在不提示输入密码的情况下正确运行plink命令。
  2. Pageant看起来需要在每次重新启动计算机时输入密码。我的研究发现了将Pageant放入启动的方法,所以当你第一次登录时会收到提示,但我需要这是自动的,就像我在Linux机器上的方式一样。如果Windows因Windows更新而重新启动,则单元测试将失败,因为它们将无法连接到Linux服务器。当然这只发生在一周一次,但在一年的过程中会非常烦人。
  3. 我可以做些什么来解决上述两个问题?如果有一个很好的替代putty用于Windows和Linux之间的自动密钥交换,我会有兴趣听到它(我宁愿远离Cygwin与OpenSSH,但如果以上可以,可能会走这条路线'得到纠正。)

2 个答案:

答案 0 :(得分:1)

我在Windows Jenkins框中使用plink每天与Linux进行通信,没有任何问题。

就像你理论化的那样,Jenkins在它自己的用户(Windows默认,我认为是SYSTEM用户)下运行,这与你登录的会话不同,即使你登录为{{1 }}。您的身份验证密钥存储在您的(Administrator或其他)配置文件目录

您需要做的是使用Administrator将您的密钥导出为Pageant文件,然后使用ppk提供此ppk文件的路径:

plink

答案 1 :(得分:0)

看起来有一种更简单的方法可以做我想做的事,Jenkin的插件https://wiki.jenkins-ci.org/display/JENKINS/Publish+Over+SSH+Plugin