我有一个构建框,我用它来进行连续构建以及运行每晚的单元测试。我正在使用 Jenkins 通过构建/单元测试脚本来完成,因为我们的编译器是基于 Windows 的,所以它在 Windows 机器上运行。
我们的企业解决方案之一使用带有 rabbitmq
的 Python 代码用于通过故障网络交换消息以同步特定数据库表。我有单元测试来帮助验证更新是否正确发生。
为了对 Python 更新进行单元测试,我需要能够停止在我的 Linux 机器上运行的一些服务,然后在更新 Python 代码后重新启动它们。我在我的 Windows 机器和 Linux 机器之间设置了一个 key 交换,这样我就不必在批处理脚本中输入密码。
当我远程进入 windows 框时,我可以成功运行批处理文件,它使用 plink
依赖于 key 交换和 putty
的命令的pageant
(在后台运行)。例如我使用 plink 从批处理文件中的命令行在 Linux 机器上执行命令。但是,当我尝试从 Jenkins 运行批处理文件时,批处理文件无法正常运行,因为在尝试运行 plink
时会提示输入 SSH 密码。命令。
我相信我目前的问题可以总结为两个问题,我希望可以得到验证和纠正:
plink
命令正确,而不会提示输入密码。 我该怎么做才能解决以上两个问题?如果对于 Windows 和 Linux 之间的自动 key 交换有一个很好的腻子替代品,我很想听听它(我更愿意使用 OpenSSH 远离 Cygwin,但如果上述方法可以的话,可能会走这条路' t被纠正)。
最佳答案
我用 plink
在我的 Windows Jenkins box 上每天与 Linux 通信,没有问题。
就像您推测的那样,Jenkins 在它自己的用户下运行(我认为 Windows 默认是 SYSTEM
用户),这与您登录的 session 不同,即使您以 Administrator
身份登录也是如此。 .您的身份验证 key 存储在您的(Administrator
或其他)配置文件目录中
你需要做的是使用Pageant
将您的 key 导出为 ppk
文件,然后提供此 ppk
的路径带有 plink
的文件:plink -i "C:\path\to\id.ppk"
关于ssh - Windows/Linux 自动 key 交换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25667651/