当前位置:  开发笔记 > 运维 > 正文

Capistrano和GitHub私人回购 - 权限被拒绝(公钥)

如何解决《Capistrano和GitHub私人回购-权限被拒绝(公钥)》经验,为你挑选了3个好方法。

我继承了一个在Linode上托管的Rails项目.

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

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

以下是我采取的步骤 -

    更新了Linode服务器上的Git远程(源)URL以指向我的新存储库

    更新了Capfile中的存储库引用,以引用我的新存储库

    有保证的ssh_options[:forward_agent]设置为true在Capfile

    在本地生成SSH密钥(id_rsa.pub)并将其添加到GitHub中的用户帐户

    执行该ssh-add命令,以确保为auth代理添加了身份

    跑来ssh -T git@github.com确认ssh在当地正确设置

    登录到我的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

小智.. 20

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

ssh-add~/.ssh/id_dsa

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



1> 小智..:

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

ssh-add~/.ssh/id_dsa

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



2> Bill Watts..:

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

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



3> vdaubry..:

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

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

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有