2016-07-04 73 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 } 
相關問題