Capistrano y GitHub Private Repo – Permiso denegado (publickey)

Henetworkingé un proyecto de Rails, alojado en Linode.

El desarrollador anterior estaba usando un repository de BitBucket, junto con Capistrano para las implementaciones.

Desde entonces, configuré un repository privado en GitHub, y estoy intentando que la receta de Capistrano funcione. No estoy teniendo suerte. Continúo recibiendo un error de key pública durante la implementación.

Estos son los pasos que he dado:

  1. Actualicé la URL remota (origen) de Git en el server Linode para apuntar a mi nuevo repository
  2. Actualicé la reference del repository en el Capfile, para hacer reference a mi nuevo repository
  3. Asegurado ssh_options[:forward_agent] se estableció en verdadero en el Capfile
  4. Genere una key SSH localmente (id_rsa.pub) y la agregué a mi count de usuario en GitHub
  5. Se ejecutó el command ssh-add para asegurar que la identidad se haya agregado para el agente de authentication
  6. Ran ssh -T git@github.com para confirmar que ssh se configuró correctamente localmente
  7. Inicié session en mi server Linode y ejecuté ssh -T git@github.com para asegurarme de que funcionaba también

Además, solo en caso de que la propiedad forward_agent no funcionara, incluso intenté generar una key SSH en el server Linode y agregarla a GitHub también. Sin suerte.

Después de todo esto, cuando ejecuto la cap deploy , aparece el siguiente error:

 Permission denied (publickey). fatal: The remote end hung up unexpectedly 

A continuación está la receta que estoy usando –

 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 #{shanetworking_path}/config" put File.read("config/database.example.yml"), "#{shanetworking_path}/config/database.yml" puts "Now edit the config files in #{shanetworking_path}." end after "deploy:setup", "deploy:setup_config" task :symlink_config, roles: :app do run "ln -nfs #{shanetworking_path}/config/database.yml #{release_path}/config/database.yml" run "ln -nfs #{shanetworking_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 

Parece que no puedo entender dónde estoy yendo mal, cualquier ayuda sería muy apreciada.


ACTUALIZAR

También me he asegurado de que se haya agregado lo siguiente a mi file local ~ / .ssh / config …

 Host mydomain.com ForwardAgent yes 

Hoy encontré la causa raíz en MAC. Mi key ssh no se agregó al agente de authentication, por lo que no se reenvió la key. La solución fue ejecutar el siguiente command:

ssh-add ~ / .ssh / id_dsa

(o ssh-add ~ / .ssh / id_rsa si usas la tecla rsa)

Intente agregar la siguiente línea a su script de Capistrano, esto le indicará explícitamente a Capistrano qué tecla debería estar usando.

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

Si todavía estás atascado, respondí una pregunta similar a la tuya aquí: El reenvío de agente SSH no funciona

Compruebe si su key se agrega a la list de identidades de agente con ssh-add -L .

Del mismo modo, pude SSH desde la máquina de desarrollo a la máquina de ensayo y también SSH desde la máquina de ensayo a github.com.

Sin embargo, la implementación del límite falló al hacer el clon git

 Permission denied (publickey). 

sin embargo, el git ls-remote funcionó, lo cual es extraño.

Si agregué esto a mi configuration en la máquina de puesta en escena funciona

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

para mí, la única forma en que se implementó fue:

agregando el id_rsa local al server 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"

después de escribir el command. Es preferible establecer el set : ssh_options . A continuación, set :use_sudo, true en el file deploy.rb . Finalmente instal

  • En el server:

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

  • En deploy.rb (local):

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