2016-07-04 107 views
0

我使用Capistrano(v3.5.0)从我的本地开发机器上使用在Bitbucket上设置的部署密钥部署到Linode上托管的VPS的小型Rails应用程序。就在上个星期,它就像一个魅力。为什么Capistrano在部署期间无法从我的Bitbucket Git存储库中读取?

然而今天,当我运行通常cap deploy命令,它没有在第三步时,它试图从我的到位桶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 [email protected]: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日志中成功运行相同的命令。
  • 当我以部署用户的身份登录到VPS服务器时,可以手动运行ssh -T [email protected]和相同的git命令,而不会出现问题。
  • 我的本地机器上的Jenkins服务器可以使用其部署密钥从相同的Bitbucket存储库成功读取。

我错过了什么?

+0

Capistrano的使用SSH代理转发。实际上,这意味着它将使用您的本地* SSH密钥与BitBucket进行身份验证。您的本地密钥是否已更改或不再具有BitBucket访问权限? –

+0

@MattBrictson你钉了它。我在本地系统上有多个Bitbucket用户,我想默认情况下会在部署之间重置。无论如何,解决方法是将此行添加到我的'deploy.rb'文件中:'set:ssh_options,{forward_agent:false}'。将您的评论转换为答案,然后我选择它。谢谢! – klenwell

回答

1

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

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

您可以禁用Capistrano酒店的SSH代理转发(从而使Git的使用已安装在服务器上部署关键)是这样的:

set :ssh_options, { forward_agent: false } 
相关问题