SSH代理转发未在所有SSH目标计算机上运行
SSH代理转发未在所有SSH目标计算机上运行,ssh,ansible,ssh-keys,buildbot,ssh-agent,Ssh,Ansible,Ssh Keys,Buildbot,Ssh Agent,/home/buildworker/.ssh/ssh\u config host * IdentityFile /home/buildworker/.ssh/buildworker StrictHostKeyChecking yes ForwardAgent yes 我们正在使用Buildbot在测试和生产环境中构建django应用程序。当开发人员将代码推送到代码存储库时,会触发相应的构建以运行ansible playbook,该playbook将应用程序部署到测试
/home/buildworker/.ssh/ssh\u config
host *
IdentityFile /home/buildworker/.ssh/buildworker
StrictHostKeyChecking yes
ForwardAgent yes
我们正在使用Buildbot在测试和生产环境中构建django应用程序。当开发人员将代码推送到代码存储库时,会触发相应的构建以运行ansible playbook,该playbook将应用程序部署到测试或生产环境中。
生产和测试机器的名称由约定标识:app.domain.com
和app.test.domain.com
问题是ansible playbook,尽管buildworker能够通过SSH连接到这两种环境,但playbook的任务之一涉及在目标机器(测试或生产)上使用转发的SSH代理从代码存储库获取代码。此任务在测试环境机器中失败,但在生产环境中工作得非常好。由于我们使用的是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,为了确保转发具有正确密钥buildworker的SSH代理,我确保文件/etc/sudoers
包含
Defaults env_keep += "SSH_AUTH_SOCK"
结果是ansible playbook以root用户身份在生产环境中成功运行,但未在测试环境中运行。接下来的工作是在/etc/ansible/ansible.cfg
文件中添加配置:
[ssh_connection]
ssh_args=-o ControlMaster=auto -o ControlPersist=60s -o ForwardAgent=yes
通过buildworker机器中的配置,ansible playbooks能够支持SSH代理,甚至根用户也可以从代码存储库中获取代码
但是,仍然不清楚SSH代理是否在生产环境中转发,而不添加上述配置