【问题标题】:One SSH Key for multiple Ubuntu servers + Windows + Teamcity多个 Ubuntu 服务器 + Windows + Teamcity 的一个 SSH 密钥
【发布时间】:2015-12-03 12:29:20
【问题描述】:

我想就我目前遇到的问题向大家寻求帮助。这是我的问题。

我想使用相同的 SSH 密钥访问多个 Ubuntu 服务器。这样做的原因是我想通过 CI 服务器将我们的应用程序部署在 DEV、STAGING、PROD、LOCAL 环境中。我们在这些环境中使用 Ubuntu 服务器。技术负责人要求我生成一个密钥并将其用于所有服务器,以使持续集成变得容易。 我们为 CI 使用 Teamcity,Teamcity 服务器及其代理在同一 Windows 服务器中运行。

我在一台服务器(本地服务器)中生成了 id_rsa 和 id_rsa.pub 密钥对。

下一步是将 id_rsa.pub 复制到所有其他服务器,并将 id_rsa 文件上传到 Teamcity 服务器。

我假设现在 Teamcity 服务器拥有 id_rsa 密钥,它应该能够 ssh 到 Ubuntu 服务器并通过 SSH Exec(部署程序插件)发出命令。

有人可以从 SSH 密钥的角度告诉我我所做的并假设到目前为止是正确的吗?远程服务器是 Ubuntu,客户端(Teamcity 服务器)是 Windows 服务器。

如上所述,我尝试连接到从城市服务器生成密钥的服务器。在这种情况下,我将 id_rsa 上传到 teamcity 服务器并尝试连接。我已将以下内容作为 id_rsa 文件的路径。我验证了该文件实际上位于以下位置。

E:\BuildServerConfig\config\projects\MyProject\pluginData\ssh_keys 其中 E:\BuildServerConfig 是数据目录。

但我收到以下错误

com.jcraft.jsch.JSchException: java.io.FileNotFoundException: E:\BuildServerConfig\config\projects\MyProject\pluginData\ssh_keys(系统找不到指定的路径)

我知道路径是可选的,当我删除路径时,它给出了以下错误

意外错误:java.lang.IllegalArgumentException:jetbrains/buildServer/util/FileUtil.resolvePath 的 @NotNull 参数“路径”的参数不得为空

请教我一下?

【问题讨论】:

    标签: linux windows ubuntu teamcity ssh-keys


    【解决方案1】:

    您将钥匙放入: E:\BuildServerConfig\config\projects\MyProject\pluginData\ssh_keys 错误消息说它在以下位置找不到密钥:E:\BuildServerConfig\config\projects\MyProject\pluginData\ssh_keys。这可能就是您收到找不到指定路径的消息的原因。

    私钥 (id_rsa) 通常保留在客户端上。如果您将私钥(id_rsa)放在teamcity服务器上,显然您想将teamcity服务器用作客户端?

    你在标题中问的问题是如何通过一个密钥使用多个 UBUNTU 服务器

    1. 在 CLIENT 机器上,创建一个 ssh 密钥对:

      ssh-keygen -t rsa
      

      这会在主目录的隐藏目录 .ssh 中创建一个密钥对。密钥对由一个秘密私钥文件(通常命名为“id_rsa”)和一个公钥文件(通常命名为“id_rsa.pub”)组成

    2. 从 CLIENT 机器,将公钥复制到 SERVER 机器

       ssh-copy-id username@servermachine
      

      服务器机器可能会要求您输入“用户名”的密码才能登录。如果登录成功,公钥将被复制到服务器。在服务端,客户端公钥被添加到服务端用户名主目录下的 .ssh/authorized_keys 文件中。 对所有服务器重复此步骤。

    3. 您现在可以使用单个密钥从客户端登录到所有服务器。要对此进行测试,请在 CLIENT 机器上尝试: ssh 用户名@servermachine1 现在您应该无需密码即可在 servermachine1 上登录,ssh 连接使用私钥和公钥的组合。您应该对 servermachine2 重复此测试到 servermachineN

    对于其他操作系统,例如 Windows,ssh 不是标准功能。 SSH 命令、密钥文件的名称和位置以及密钥存储格式,取决于您使用的 ssh 软件。总体思路是:

    • 在客户端上创建一个密钥对(私有 + 公有)。密钥对属于创建密钥对的用户
    • 将服务器的公钥复制到服务器上为用户指定的密钥位置
    • 使用客户端密钥对和服务器上指定的用户名从客户端登录到服务器。除了登录之外,您还可以使用 ssh 软件堆栈和密钥在客户端和服务器之间复制文件或发送命令。

    【讨论】:

      猜你喜欢
      • 2021-12-26
      • 2012-07-09
      • 1970-01-01
      • 1970-01-01
      • 2021-09-14
      • 1970-01-01
      • 2017-09-25
      • 2012-04-27
      • 2016-08-20
      相关资源
      最近更新 更多