我想使用同一个 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_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 参数“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 中?