我一直在研究這一整天,似乎無法找到答案,所以我張貼在這裏。我們正在使用capistrano multistage來部署我們的Rails應用程序,一切都很好,直到我們開始自動部署。capistrano ssh連接 - 從cron或teamcity運行時不工作
現在,只要這是交互式運行沒有問題,部署完成就好了。我們現在正在考慮在每次成功構建之後使用ci(Teamcity)部署到我們的臨時環境。
在CI服務器上,運行「ssh server1」或「ssh deploy @ server1」的工作沒有問題。
我的CI階段是這樣的,再從命令行工作正常
set :branch, "development"
set :rails_env, "staging"
set :user, "deploy"
$:.unshift(File.expand_path('./lib', ENV['rvm_path']))
require 'rvm/capistrano'
set :rvm_ruby_string, 'ruby-1.9.2-p290'
set :rvm_bin_path, "/usr/local/rvm/bin/"
default_run_options[:pty] = true
ssh_options[:verbose] = :debug
default_run_options[:pty] = true
role :app, "server1"
role :web, "server1"
role :utility, "server2"
role :db, "server1", :primary => true
我deploy.rb是非常大的,但這些都是相關的設置
# Repo Settings
set :repository, "[email protected]:myrepo/myrepo.git"
set :scm, "git"
set :checkout, 'export'
set :copy_exclude, ".git/*"
set :deploy_via, :remote_cache
# General Settings
default_run_options[:pty] = true
set :ssh_options, { :forward_agent => true }
set :keep_releases, 20
set :use_sudo, false
在團隊市最後的構建步驟我添加了一個命令行任務,它只是簡單的「cap ci deploy:setup」 - 作爲比完整部署更容易的測試
cap日誌顯示了我:
[03:27:38]: [Step 4/10] D, [2011-11-21T03:27:38.103284 #22035] DEBUG -- net.ssh.authentication.session[70ca88]: allowed methods: publickey,password
[03:27:38]: [Step 4/10] E, [2011-11-21T03:27:38.103328 #22035] ERROR -- net.ssh.authentication.session[70ca88]: all authorization methods failed (tried publickey)
同樣的事情,似乎從一個cronjob發生 - 但沒有記錄有
對我來說這似乎是一個環境問題,因爲TeamCity的和可能的cron加載的arent我的全部環境。我試過直接在cap文件中指定我的ssh密鑰,除此之外,它似乎沒有任何作用。
另一個奇怪的是,在我試圖部署到的遠程服務器上,auth.log顯示沒有嘗試連接,因此從服務器端進行故障排除似乎不是一種選擇。
所以我的問題是,我怎麼得到這個工作?任何想法,以確定問題的地方,或我需要設置的環境變量讚賞。
任何將我帶到解決方案的答案都將被接受。
謝謝。
爲什麼你將'forward_agent'選項設置爲yes?不會有crontab中的SSH代理。 – Zoredache
我想使用轉發代理,而不是將私鑰放在遠程服務器上。從我讀到的代理不可用net.ssh會嘗試建立連接。 – pablo
cron是否將腳本作爲所需用戶運行?如果腳本以root身份運行,它也會嘗試使用來自root用戶的publickey,這可能不會被服務器識別。 (公共密鑰是用戶綁定的) – HectorMalot