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.comapp.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 目标机器[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

从外网 SSH 进局域网,反向代理+正向代理解决方案

端口转发&代理学习

端口转发&代理学习

ssh隧道 学习总结

需要通过 SSH1 和 SSH2 从 Perl 脚本连接机器

怎样通过外网ssh访问树莓派