为什么 Capistrano 在部署期间突然无法从我的 Bitbucket Git 存储库中读取?
Why suddenly is Capistrano unable to read from my Bitbucket Git repository during deploy?
我使用 Capist运行o (v3.5.0) 将一个小型 Rails 应用程序从我的本地开发机器部署到 VPS 托管在 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 主机上生成一个新密钥。
尤其是这几点让我感到困惑:
- Capist运行o 或 VPS 配置自上次 运行 成功以来(据我所知)没有任何变化。我上周在我的 Capist运行o 日志中看到相同的命令 运行ning 成功。
- 当我以部署用户身份通过 ssh 进入 VPS 服务器时,我可以 运行
ssh -T git@bitbucket.org
和完全相同的 git 命令手动执行。
- 我本地计算机上的 Jenkins 服务器可以使用其部署密钥从同一个 Bitbucket 存储库中成功读取。
我错过了什么?
默认情况下,Capistrano 使用 SSH 代理转发。实际上,这意味着它将使用您的本地 SSH 密钥通过 BitBucket 进行身份验证。
也许您的本地密钥已更改或不再具有 BitBucket 访问权限,这可以解释为什么部署不再有效。
您可以像这样禁用 Capistrano 的 SSH 代理转发(从而允许 Git 使用您在服务器上安装的部署密钥):
set :ssh_options, { forward_agent: false }
我使用 Capist运行o (v3.5.0) 将一个小型 Rails 应用程序从我的本地开发机器部署到 VPS 托管在 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 主机上生成一个新密钥。
尤其是这几点让我感到困惑:
- Capist运行o 或 VPS 配置自上次 运行 成功以来(据我所知)没有任何变化。我上周在我的 Capist运行o 日志中看到相同的命令 运行ning 成功。
- 当我以部署用户身份通过 ssh 进入 VPS 服务器时,我可以 运行
ssh -T git@bitbucket.org
和完全相同的 git 命令手动执行。 - 我本地计算机上的 Jenkins 服务器可以使用其部署密钥从同一个 Bitbucket 存储库中成功读取。
我错过了什么?
默认情况下,Capistrano 使用 SSH 代理转发。实际上,这意味着它将使用您的本地 SSH 密钥通过 BitBucket 进行身份验证。
也许您的本地密钥已更改或不再具有 BitBucket 访问权限,这可以解释为什么部署不再有效。
您可以像这样禁用 Capistrano 的 SSH 代理转发(从而允许 Git 使用您在服务器上安装的部署密钥):
set :ssh_options, { forward_agent: false }