我继承了一个托管在 Linode 上的 Rails 项目。
之前的开发人员使用 BitBucket 存储库以及 Capistrano 进行部署。
我已经在 GitHub 上设置了一个私有(private)存储库,并且我正在尝试让 Capistrano 配方工作。我没有运气。我在部署期间继续收到公钥错误。
以下是我采取的步骤——
ssh_options[:forward_agent]
在 Capfile ssh-add
命令,以确保为身份验证代理 ssh -T git@github.com
确认 ssh 已在本地正确设置 ssh -T git@github.com
以确保它也能正常工作此外,以防 forward_agent 属性不起作用,我什至尝试在 Linode 服务器上生成 SSH key ,并将其添加到 GitHub。没运气。
毕竟,当我运行
cap deploy
,我收到以下错误:Permission denied (publickey).
fatal: The remote end hung up unexpectedly
下面是我正在使用的食谱——
require "bundler/capistrano"
server "----SERVER IP----", :web, :app, :db, primary: true
set :application, "blog"
set :user, "deployer"
set :deploy_to, "/var/www/blog"
set :deploy_via, :remote_cache
set :use_sudo, false
set :scm, "git"
set :repository, "git@github.com:--MY USERNAME--/blog.git"
set :branch, "master"
default_run_options[:pty] = true
ssh_options[:forward_agent] = true
after "deploy", "deploy:cleanup" # keep only the last 5 releases
namespace :deploy do
task :start do; end
task :stop do; end
task :restart, roles: :app, except: {no_release: true} do
run "touch #{deploy_to}/current/tmp/restart.txt"
end
task :setup_config, roles: :app do
sudo "ln -nfs #{current_path}/config/apache.conf /etc/apache2/sites-available/blog"
run "mkdir -p #{shared_path}/config"
put File.read("config/database.example.yml"), "#{shared_path}/config/database.yml"
puts "Now edit the config files in #{shared_path}."
end
after "deploy:setup", "deploy:setup_config"
task :symlink_config, roles: :app do
run "ln -nfs #{shared_path}/config/database.yml #{release_path}/config/database.yml"
run "ln -nfs #{shared_path}/public/avatars #{release_path}/public/avatars"
end
after "deploy:finalize_update", "deploy:symlink_config"
desc "Make sure local git is in sync with remote."
task :check_revision, roles: :web do
unless `git rev-parse HEAD` == `git rev-parse origin/master`
puts "WARNING: HEAD is not the same as origin/master"
puts "Run `git push` to sync changes."
exit
end
end
before "deploy", "deploy:check_revision"
end
我似乎无法弄清楚我哪里出错了——任何帮助将不胜感激。
更新
我还确保将以下内容添加到我的本地 ~/.ssh/config 文件中......
Host mydomain.com
ForwardAgent yes
最佳答案
今天我在MAC上找到了根本原因。我的 ssh key 未添加到身份验证代理中,因此未转发该 key 。解决方案是执行以下命令:
ssh-add ~/.ssh/id_dsa
(或
ssh-add ~/.ssh/id_rsa
如果您使用 rsa key )删除添加到代理的所有 ssh key
ssh-add -D
关于ruby-on-rails - Capistrano 和 GitHub 私有(private) repo - 权限被拒绝(公钥),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22977714/