Capistrano和GitHub Private Repo – 许可被拒绝(公钥)

我inheritance了一个在Linode上托管的Rails项目。

之前的开发人员使用BitBucket存储库以及Capistrano进行部署。

我已经在GitHub上设置了一个私有存储库,我正试图让Capistrano的配方工作。 我没有运气。 我在部署期间继续收到publickey错误。

以下是我采取的步骤 –

  1. 更新了Linode服务器上的Git远程(源)URL以指向我的新存储库
  2. 更新了Capfile中的存储库引用,以引用我的新存储库
  3. 确保在ssh_options[:forward_agent]设置为true
  4. 在本地生成SSH密钥(id_rsa.pub)并将其添加到GitHub中的用户帐户
  5. 执行ssh-add命令,以确保为auth代理添加了标识
  6. ssh -T git@github.com确认ssh在本地正确设置
  7. 登录到我的Linode服务器并运行ssh -T git@github.com以确保它也正常工作

另外,为了防止forward_agent属性不起作用,我甚至尝试在Linode服务器上生成SSH密钥,并将其添加到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 

我似乎无法弄清楚我哪里出错了 – 任何帮助都会非常感激。


UPDATE

我还确保将以下内容添加到我的本地〜/ .ssh / config文件中…

 Host mydomain.com ForwardAgent yes 

今天我找到了MAC的根本原因。 我的ssh密钥未添加到身份validation代理,因此密钥未转发。 解决方案是执行以下命令:

ssh-add~ / .ssh / id_dsa

(或者如果你使用rsa键,则ssh-add~ / .ssh / id_rsa)

尝试将以下行添加到Capistrano脚本中,这将明确告诉Capistrano它应该使用哪个键。

 set :ssh_options, { forward_agent: true, paranoid: true, keys: "~/.ssh/id_rsa" } 

如果您仍然卡住,我回答了与您类似的问题: SSH代理转发无法正常工作

检查您的密钥是否已添加到使用ssh-add -L的代理身份列表中。

同样地,我可以从开发机器到登台机器以及从登台机器到github.com的SSH。

但是,在执行git clone时,cap部署失败了

 Permission denied (publickey). 

然而git ls-remote工作很奇怪。

如果我在暂存机上将它添加到我的配置中就可以了

 Host github.com Hostname github.com IdentityFile ~/.ssh/git User git 

对我来说,它部署的唯一方式是:

将本地id_rsa添加到服务器cat ~/.ssh/github_rsa.pub | ssh -i /Users/jasmo2/Documents/AWS-keypair/designmatch.pem ubuntu@52.37.202.32 "cat >> .ssh/authorized_keys" cat ~/.ssh/github_rsa.pub | ssh -i /Users/jasmo2/Documents/AWS-keypair/designmatch.pem ubuntu@52.37.202.32 "cat >> .ssh/authorized_keys"

输入命令后。 最好设置set :ssh_options 。 然后在deploy.rb文件中set :use_sudo, true 。 最后安装

  • 在服务器上:

sudo apt-get install libpq-dev gem install pg -v '0.18.4'

  • deploy.rb (本地)上:

desc 'Restart application' task :restart do on roles(:app), in: :sequence, wait: 5 do execute :mkdir, '-p', "#{ release_path }/tmp" execute :touch, release_path.join('tmp/restart.txt') end end