gpt4 book ai didi

linux - 一个 SSH key 适用于多个 Ubuntu 服务器 + Windows + Teamcity

转载 作者:太空宇宙 更新时间:2023-11-04 03:33:26 39 4
gpt4 key购买 nike

关于我目前遇到的问题,我希望得到大家的帮助。这是我的问题。

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

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

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

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

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

正如我上面所描述的,我尝试连接到从城市服务器生成 key 的服务器。在这种情况下,我将 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 参数“路径”的参数不能为空

有人可以告诉我这个吗?

最佳答案

您将 key 放入:E:\BuildServerConfig\config\projects\MyProject\pluginData\ssh_keys错误消息显示无法在以下位置找到 key :E:\BuildServerConfig\config\projects\MyProject\pluginData\ssh_keys。这可能就是您收到找不到指定路径的消息的原因。

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

您在标题中提出的问题是如何通过一个 key 使用多个 UBUNTU 服务器

  1. 在客户端计算机上,创建 ssh key 对:

    ssh-keygen -t rsa

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

  2. 从客户端计算机将公钥复制到服务器计算机

     ssh-copy-id username@servermachine

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

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

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

  • 在客户端上创建 key 对(私有(private)+公共(public))。 key 对属于创建该 key 对的用户
  • 将服务器的公钥复制到服务器上用户指定的 key 位置
  • 从客户端使用客户端 key 对和服务器上指定的用户名登录到服务器。您还可以使用 ssh 软件堆栈和 key 在客户端和服务器之间复制文件或发送命令,而不是登录。

关于linux - 一个 SSH key 适用于多个 Ubuntu 服务器 + Windows + Teamcity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32447324/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com