一个 SSH 密钥适用于多个 Ubuntu 服务器 + Windows + Teamcity

一个 SSH 密钥适用于多个 Ubuntu 服务器 + Windows + Teamcity

我想使用同一个 SSH 密钥访问多个 Ubuntu 服务器。原因是我想通过 CI 服务器在 DEV、STAGING、PROD、LOCAL 环境中部署我们的应用程序。我们在这些环境中使用 Ubuntu 服务器。技术主管要求我生成一个密钥并将其用于所有服务器,以便轻松实现持续集成。

我们使用 Teamcity 进行 CI,Teamcity 服务器及其代理在同一个 Windows 服务器中运行。

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

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

我认为,既然现在 Teamcity 服务器有了 id_rsa 密钥,它应该能够 ssh 到 Ubuntu 服务器并通过 SSH Exec(Deployer 插件)发出命令。

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

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

E:\BuildServerConfig\config\projects\MyProject\pluginData\ssh_keysE:\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 参数“path”的参数不能为空

有人可以就此启发我吗?

答案1

我对 Teamcity 一无所知,因此我会参考 Catbird55 关于服务器的回答。但是,在 Ubuntu 端,仅将 id_rsa.pub 文件复制到远程服务器是不够的。您需要确定 Teamcity 将用于连接服务器的用户 ID,然后将 id_rsa.pub 的内容添加到该用户的 authorized_keys 中:

cat /path/to/id_rsa.pub >> ~teamcityuser/.ssh/authorized_keys

如果authorized_keys不存在,则可能设置一些权限:

chown teamcityuser ~teamcityuser/.ssh/authorized_keys
chmod 600 ~teamcityuser/.ssh/authorized_keys

答案2

有人能从 SSH 密钥的角度告诉我到目前为止我所做的事情和假设是否正确吗?

我觉得有问题。

您说路径是可选的。Java 应用程序期望文件位于此处:

E:\BuildServerConfig\config\projects\MyProject\pluginData\ssh_keys

但这篇文章的读者不知道那里是否存在副本。你确实说过你把文件放在这里:

E:\BuildServerConfig\config\projects\MyProject\pluginData\ssh_keys

我会做以下两件事之一:

1) 是否可以修改代码以查找“MyProject 的子文件夹 pluginData 而不是 BeyondBank 的 pluginData?如果不能,请使用选项二:2) ssh_keys 文件是否可以放在 MyProject 子文件夹 pluginData 中?

相关内容