4

我们使用 ssh 代理转发将 Symfony2 项目部署到我们的服务器。这工作正常,我们使用 capistrano 从 github 执行 git clone 等没有问题。

但是,对于 Symfony2,您需要执行 bin/vendors install 以获取最新的 deps。这个供应商脚本 ( https://github.com/symfony/symfony-standard/blob/2.0/bin/vendors ) 是一个执行“system()”命令的 php 脚本,例如 git pull。

在 capifony(capistrano 和 symfony 的插件)中实现了供应商命令,我们对其进行了一些修改以使用 try_sudo,由于我们自己的托管平台需要进行更改。这非常适合来自 github 的公共 https:// url

try_sudo "sh -c 'cd #{latest_release} && #{php_bin} bin/vendors install'"

我们面临的问题是,当使用 git@github.com 格式时(需要一些私有 repo 以及当我们想要修改捆绑包并将更改推回时)ssh-agent 不可用,因此我们的转发密钥丢失并且我们得到权限被拒绝的错误。

  • 切换到 https:// 格式听起来很容易解决,但私人仓库要求输入密码。
  • 在 system() 命令中启动 ssh-agent 有效,但是密钥仍然不存在。

所以不知道进一步寻找什么。将 ssh-agent 传递到 php 供应商脚本的某种方式可能是什么?

更新

我找到了答案,出于安全原因,sudo 删除了所有环境变量,因此您永远无法附加到现有的 ssh 代理。

https://serverfault.com/questions/107187/sudo-su-username-while-keeping-ssh-key-forwarding我发现了错误和解决方案。通过将默认值 env_keep+=SSH_AUTH_SOCK 添加到 /etc/sudoers,然后对代理套接字进行 chmodding 以便您正在 sudo 访问的用户可以访问它,您可以保留 ssh 代理。

但是请仔细阅读线程,这样做是不安全的。注销时代理会被销毁,因此在我们的 capistrano 部署序列中,结合没有不受信任用户的服务器,我认为这可能是可以接受的。除非我记错了?

4

0 回答 0