ssh - Windows/Linux 自动 key 交换

标签 ssh build jenkins ssh-keys ssh-tunnel

我有一个构建框,我用它来进行连续构建以及运行每晚的单元测试。我正在使用 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"

    关于ssh - Windows/Linux 自动 key 交换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25667651/

    相关文章:

    两个 EC2 实例之间的 ssh

    java - Maven 构建 Jar

    build - 配置 scons 以在 Windows 命令提示符中使用 posix 参数的问题

    java - 如何使用 ant-javac 仅清理 destDir 中不再位于源目录中的文件

    jenkins - 在 Docker 容器中使用 Jenkins 运行测试

    grails - 如何将 Grails 添加到我的 cloudbees Jenkins 安装中?

    php - Jenkins PHP 示例测试项目

    linux - 通过 SSH 连接时我的密码是什么?

    通过ssh执行Mysql查询

    git - 不断提示输入 .ssh/id_rsa 的密码