IT序号网

ssh之Windows/Linux 自动 key 交换

zhoujg 2026年07月28日 编程语言 72 0

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

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

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

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

我相信我目前的问题可以总结为两个问题,我希望可以得到验证和纠正:

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

  • 我该怎么做才能解决以上两个问题?如果对于 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"


    评论关闭
    IT序号网

    微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!