【发布时间】:2021-03-06 23:26:14
【问题描述】:
/home/buildworker/.ssh/ssh_config
host *
IdentityFile /home/buildworker/.ssh/buildworker
StrictHostKeyChecking yes
ForwardAgent yes
我们正在使用 Buildbot 在测试和生产环境中构建 django 应用程序。流程是当开发人员将代码推送到 rhodecode 存储库时,会触发相应的构建以运行将应用程序部署到测试或生产环境的 ansible playbook。
生产和测试机器名称按约定标识:分别为app.domain.com 和app.test.domain.com。
问题是 ansible playbook,尽管 buildworker 能够通过 SSH 连接到这两种环境,但 playbook 的任务之一涉及在目标机器(测试或生产)上使用转发的 SSH 代理从 rhodecode 存储库获取代码。此任务在测试环境机器中失败,但在生产环境中运行良好。由于我们使用的是host *,所以 SSH 代理转发应该发生在所有目标机器上。
问题是在我们将 buildbot 主机从 debian 9 升级到 debian 10 后开始的,它在 debian 9 上运行良好。
我尝试了以下调试: 我从我的机器到 buildbot 机器进行了 SSH,并尝试通过成为 buildworker 用户来运行 ansible playbook 并运行 playbook:
eval `ssh-agent -s` && ssh-add /home/buildworker/.ssh/buildworker && ansible-playbook -i environments/testing/inventory --user buildworker application.yml
生产和测试都很好。
由于 ansible 使用 root 用户运行 plabyook,为了确保具有正确密钥的 SSH 代理 buildworker 被转发,我确保文件 /etc/sudoers 包含
Defaults env_keep += "SSH_AUTH_SOCK"
结果是 ansible playbook 以 root 用户身份在生产环境中成功运行,但在测试环境中却没有。
【问题讨论】:
标签: ssh ansible ssh-keys buildbot ssh-agent