我一直在研究这一整天,似乎无法找到答案,所以我张贴在这里。我们正在使用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