SSH 代理转发不适用于所有 SSH 目标机器[关闭]
Posted
技术标签:
【中文标题】SSH 代理转发不适用于所有 SSH 目标机器[关闭]【英文标题】:SSH agent forwarding is not working on all the SSH target machines [closed] 【发布时间】: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 用户身份在生产环境中成功运行,但在测试环境中却没有。
【问题讨论】:
【参考方案1】:在answer 之后,有效的是在/etc/ansible/ansible.cfg
文件中添加配置:
[ssh_connection]
ssh_args=-o ControlMaster=auto -o ControlPersist=60s -o ForwardAgent=yes
通过 buildworker 机器中的配置,ansible playbook 能够转发 SSH 代理,即使是 root 用户也可以从 rhodecode 存储库中获取代码。
但是,在没有添加上述配置的情况下,SSH 代理是否在生产环境中被转发仍然不清楚。
【讨论】:
以上是关于SSH 代理转发不适用于所有 SSH 目标机器[关闭]的主要内容,如果未能解决你的问题,请参考以下文章