为什么Capistrano在部署期间无法从我的Bitbucket Git存储库中读取?

时间:2016-07-04 13:54:00

标签: git ssh capistrano bitbucket linode

我使用Capistrano(v3.5.0)使用在Bitbucket上设置的部署密钥,将本地开发机器上的小型Rails应用程序部署到Linode上托管的VPS。直到上周,它才像魅力一样。

然而,今天,当我运行通常的cap deploy命令时,它尝试从我的Bitbucket Git存储库读取时,在第三步失败:

DEBUG [6906a62c] Command: ( export RBENV_ROOT="$HOME/.rbenv" RBENV_VERSION="2.2.1"
  GIT_ASKPASS="/bin/echo" GIT_SSH="/tmp/app/git-ssh.sh" ; /usr/bin/env git
  ls-remote --heads git@bitbucket.org:klenwell/app.git )

这是错误:

DEBUG [6906a62c]       conq: repository access denied.
DEBUG [6906a62c]       fatal: The remote end hung up unexpectedly

我已经完成了明显的故障排除:谷歌搜索错误消息,确认VPS正常运行,验证存储库是否可访问,双重检查SSH密钥,确认SSH代理正在运行。如果所有其他方法都失败了,我会尝试在我的VPS主机上生成一个新密钥。

这些要点特别令我感到沮丧:

  • 自上次成功运行以来,(据我所知)Capistrano或VPS配置没有变化。我上周在Capistrano日志中看到了相同的命令。
  • 当我作为部署用户ssh进入我的VPS服务器时,我可以手动运行ssh -T git@bitbucket.org和相同的git命令而不会出现问题。
  • 我本地计算机上的Jenkins服务器可以使用其部署密钥从同一个Bitbucket存储库中成功读取。

我错过了什么?

1 个答案:

答案 0 :(得分:1)

默认情况下,Capistrano使用SSH代理转发。实际上,这意味着它将使用您的本地SSH密钥与BitBucket进行身份验证。

也许您的本地密钥已更改或不再具有BitBucket访问权限,这可以解释为什么部署不再有效。

您可以禁用Capistrano的SSH代理转发(从而允许Git使用您在服务器上安装的部署密钥),如下所示:

set :ssh_options, { forward_agent: false }