未能使用代理转发的ssh密钥与capistrano和symfony2 bin / vendors安装

时间:2012-05-23 16:35:10

标签: php symfony capistrano capifony ssh-agent

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

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

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

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

我们面临的问题是,当使用git@github.com格式时(某些私有仓库需要以及我们想要修改捆绑包并推送更改时)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以便您正在进行操作的用户可以访问它,您可以保留ssh代理。

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

0 个答案:

没有答案