ruby-on-rails - Capistrano 和 GitHub 私有(private) repo - 权限被拒绝(公钥)

标签 ruby-on-rails github ssh capistrano linode

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

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

我已经在 GitHub 上设置了一个私有(private)存储库,并且我正在尝试让 Capistrano 配方工作。我没有运气。我在部署期间继续收到公钥错误。

以下是我采取的步骤——

  • 更新了 Linode 服务器上的 Git 远程(原始)URL 以指向我的新存储库
  • 更新了 Capfile 中的存储库引用,以引用我的新存储库
  • 保证ssh_options[:forward_agent]在 Capfile
  • 中设置为 true
  • 在本地生成 SSH key (id_rsa.pub) 并将其添加到我在 GitHub 中的用户帐户
  • 执行ssh-add命令,以确保为身份验证代理
  • 添加了身份
  • ssh -T git@github.com确认 ssh 已在本地正确设置
  • 登录我的 Linode 服务器并运行 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/

    相关文章:

    ruby-on-rails - Ruby on Rails : If you have 50 if-else statements in your after_create action, 会减慢您的应用程序吗?

    ruby-on-rails - named_scope + average 导致在 postgresql 上运行的 sql 查询中多次指定表

    GitHub - 从我的个人资料中显示的收集贡献中排除某些存储库

    git - Ansible + SSH + 私有(private) Git

    SSH 在登录时要求输入密码而不是密码短语

    ruby-on-rails - 如何删除字符串中第一次出现的子字符串?

    ruby-on-rails - 如何使用 PSequel GUI 在 Mac 上连接到本地主机 PostgreSQL?

    git - 恢复通过 git -f --mirror 在远程 Github 存储库上删除的分支

    git - 如果提交格式不正确,是否可以拒绝 Github 上的提交?

    ubuntu - rsub connect_to localhost : unknown host (nodename nor servname provided, 或未知)