2015-12-02 152 views
0

我試圖部署我的Rails 4應用程序使用Capistrano 3.4,但不斷得到身份驗證失敗的錯誤。我只是不明白我應該在哪裏設置Git倉庫的密碼。Rails Capistrano身份驗證失敗錯誤

這裏運行命令cap production deploy --trace當是我的錯誤信息:

** Execute git:check 
INFO [d5512476] Running /usr/bin/env git ls-remote --heads https://[email protected]/xxx/myapp.git as [email protected] 
DEBUG [d5512476] Command: (GIT_ASKPASS=/bin/echo GIT_SSH=/tmp/xxx/git-ssh.sh /usr/bin/env git ls-remote --heads https://[email protected]/xxx/myapp.git) 
DEBUG [d5512476]  fatal: Authentication failed 
DEBUG [d5512476] 
cap aborted! 
SSHKit::Runner::ExecuteError: Exception while executing as [email protected]: git exit status: 128 
git stdout: fatal: Authentication failed 
git stderr: Nothing written 
/home/xxx/.rvm/gems/ruby-2.2.2/gems/sshkit-1.7.1/lib/sshkit/runners/parallel.rb:16:in `rescue in block (2 levels) in execute' 
/home/xxx/.rvm/gems/ruby-2.2.2/gems/sshkit-1.7.1/lib/sshkit/runners/parallel.rb:12:in `block (2 levels) in execute' 
SSHKit::Command::Failed: git exit status: 128 
git stdout: fatal: Authentication failed 
git stderr: Nothing written 
/home/xxx/.rvm/gems/ruby-2.2.2/gems/sshkit-1.7.1/lib/sshkit/command.rb:95:in `exit_status=' 
/home/xxx/.rvm/gems/ruby-2.2.2/gems/sshkit-1.7.1/lib/sshkit/backends/netssh.rb:179:in `block in _execute' 
/home/xxx/.rvm/gems/ruby-2.2.2/gems/sshkit-1.7.1/lib/sshkit/backends/netssh.rb:133:in `tap' 
/home/xxx/.rvm/gems/ruby-2.2.2/gems/sshkit-1.7.1/lib/sshkit/backends/netssh.rb:133:in `_execute' 
/home/xxx/.rvm/gems/ruby-2.2.2/gems/sshkit-1.7.1/lib/sshkit/backends/netssh.rb:66:in `execute' 
/home/xxx/.rvm/gems/ruby-2.2.2/gems/capistrano-3.4.0/lib/capistrano/git.rb:11:in `git' 
/home/xxx/.rvm/gems/ruby-2.2.2/gems/capistrano-3.4.0/lib/capistrano/git.rb:21:in `check' 
/home/xxx/.rvm/gems/ruby-2.2.2/gems/capistrano-3.4.0/lib/capistrano/tasks/git.rake:28:in `block (4 levels) in <top (required)>' 
/home/xxx/.rvm/gems/ruby-2.2.2/gems/sshkit-1.7.1/lib/sshkit/backends/abstract.rb:85:in `with' 
/home/xxx/.rvm/gems/ruby-2.2.2/gems/capistrano-3.4.0/lib/capistrano/tasks/git.rake:27:in `block (3 levels) in <top (required)>' 
/home/xxx/.rvm/gems/ruby-2.2.2/gems/sshkit-1.7.1/lib/sshkit/backends/netssh.rb:54:in `instance_exec' 
/home/xxx/.rvm/gems/ruby-2.2.2/gems/sshkit-1.7.1/lib/sshkit/backends/netssh.rb:54:in `run' 
/home/xxx/.rvm/gems/ruby-2.2.2/gems/sshkit-1.7.1/lib/sshkit/runners/parallel.rb:13:in `block (2 levels) in execute' 
Tasks: TOP => git:check 
The deploy has failed with an error: Exception while executing as [email protected]: git exit status: 128 
git stdout: fatal: Authentication failed 
git stderr: Nothing written 
** Invoke deploy:failed (first_time) 
** Execute deploy:failed 

deploy.rb

lock '3.4.0' 

set :application, 'xxx' 
set :repo_url, 'https://[email protected]/xxx/myapp.git' 
set :deploy_to, 'home/xxx/Sites/myapp' 
set :scm, :git 
set :format, :pretty 
set :pty, true 

deploy/production.rb

server '123.45.678.90', user: 'xxx', roles: %w{web app} 
role :app, %w{[email protected]} 
role :web, %w{[email protected]} 
role :db, %w{[email protected]} 

現在我試圖反覆折騰中production.rb參數,但是我不斷收到語法錯誤。

# Custom SSH Options 
# ================== 
# You may pass any option but keep in mind that net/ssh understands a 
# limited set of options, consult the Net::SSH documentation. 
# http://net-ssh.github.io/net-ssh/classes/Net/SSH.html#method-c-start 
# 
# Global options 
# -------------- 
# set :ssh_options, { 
# keys: %w(/home/rlisowski/.ssh/id_rsa), 
# forward_agent: false, 
# auth_methods: %w(password) 
# } 
# 
# The server-based syntax can be used to override options: 
# ------------------------------------ 
# server '123.45.678.90', 
# user: 'defined_user', 
# roles: %w{web app}, 
# password: 'mypassword' 
# ssh_options: { 
#  user: 'user', 
#  keys: %w(/home/user_name/.ssh/id_rsa), 
#  forward_agent: false, 
#  auth_methods: %w(publickey password) 
# } 
+2

你應該產生一個您的服務器上的SSH密鑰對。然後,將公鑰作爲部署添加到你的git倉庫中。之後,你應該可以在不輸入密碼的情況下下載你的git倉庫。 –

+1

訪問本教程,我知道它是用於webfaction託管,但它也適用於其他服務器以及https://docs.webfaction.com/software/rails.html#deploying-a-ruby-on-rails-application- with-capistrano – mariowise

+0

@ joshua.paling這是解決方案。謝謝。如果你希望你可以發表你的評論作爲答案,所以我可以標記爲正確的。 – aishaq11

回答

2

您應該在您的服務器上生成一個SSH密鑰對。然後,將公鑰作爲部署添加到你的git倉庫中。之後,您應該可以在不輸入密碼的情況下下載您的git repo

0

部署密鑰通常用於自動部署,當您絕對必須將密鑰留在服務器上時,並且萬一它被攻破 - 某人也可以訪問您的回購。

驗證服務器訪問git的其他方法是使用ssh代理轉發,這種方式在這方面有點安全。

運行ssh-add您當前SSH密鑰添加到代理會話,然後再試一次,也Capistrano的應啓用SSH代理轉發,在3它是默認啓用的,但以防萬一:

set :ssh_options, { forward_agent: true }