Windows / Linux自动密钥交换

问题描述 投票:1回答:2

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

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

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

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

我相信我目前的问题可以通过两个问题来概括,我希望可以通过这两个问题进行验证和纠正:

  1. 我认为Jenkins可能以不同的用户身份运行或使用不同的系统凭据,因此无法像登录用户那样连接。如果是这种情况,我需要做什么,以便Jenkins可以正常运行plink命令而不会被提示输入密码。
  2. Pageant看起来需要在每次计算机重新启动时输入密码。我的研究发现了将Pageant放入启动的方法,所以当你第一次登录时会收到提示,但我需要这是自动的,就像我在Linux机器上的方式一样。如果Windows因Windows更新而重新启动,则单元测试将失败,因为它们将无法连接到Linux服务器。当然这只发生在一周一次,但在一年的过程中它会非常烦人。

我该怎么做才能解决上述两个问题?如果有一个很好的替代putty用于Windows和Linux之间的自动密钥交换,我会有兴趣听到它(我宁愿远离Cygwin与OpenSSH,但如果以上可以,可能会走这条路线'得到纠正)。

ssh build jenkins ssh-keys ssh-tunnel
2个回答
1
投票

我在我的Windows Jenkins盒子上使用plink每天与Linux进行通信,没有任何问题。

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

你需要做的是使用Pageant将你的密钥导出为ppk文件,然后使用ppk提供这个plink文件的路径:

plink -i "C:\path\to\id.ppk"


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.