Capistrano local git repository clonando a remoto pide contraseña a pesar de las keys SSH

Totalmente nuevo para Capistrano.

Tengo un repository git local que quiero publicar en mi server remoto. He seguido otras respuestas aquí y se me ocurrió esta configuration:

require 'bundler/capistrano' set :application, "app_name" set :repository, '~/Dropbox/app/.git' set :user, 'user_name' set :deploy_to, 'ssh://remote_host/~/railsApps/app_name' set :scm_verbose, true set :deploy_via, :copy default_run_options[:pty] = true server "remote_server", :web, :app, :db, :primary => true set :scm, :git set :branch, "master" ssh_options[:keys] = %w(~/.ssh/id_rsa) after "deploy:restart", "deploy:cleanup" 

Esto ya no solicita una contraseña para el server remoto, pero siempre falla con el siguiente error:

 The --deployment flag requires a Gemfile.lock. Please make sure you have checked your Gemfile.lock into version control before deploying. 

Definitivamente estoy incluyendo el file Gemfile.lock en mi git repo.

Si cambio la configuration de Capistrano para clonar desde la carpeta git remota a la que presiono (que está en ese mismo server), entonces no obtengo un error, pero me pide una contraseña cada vez que bash conectarme.

Ayuda por favor.

Tenga en count que el emparejamiento de key SSH funciona bien cuando se usa desde la CLI para la connection SSH normal.

Solución

Gracias a Tigraine pude resolverlo. Con la esperanza de que esto ayude a otra persona, aquí está lo que finalmente funcionó:

Tigraine tiene razón en que las routes son locales para el server remoto, pero recibí un error al tratar de usar las routes locales, Capistrano siguió buscando en mi máquina local y cometiendo errores cuando no pudo encontrar esas routes.

Lo que tuve que hacer fue agregar el local_repository a la configuration y luego todo funcionó. Entonces los bits que cambié son estos:

 set :local_repository, '~/Dropbox/app_name/.git' set :repository, '~/railsApps/app_name.git' set :deploy_to, '~/railsApps/app_name' 

La ruta local_repository es local para mi máquina y las routes del repository y deploy_to son locales para el server remoto.

En primer lugar: Capistrano siempre ejecuta sus commands en el server remoto en el que está implementando. Esto significa que todas las routes que usa en set :deploy_to son routes locales en el server.

En mi caso, la configuration se ve así:

 set :scm, 'git' set :repository, "<repo url>" set :branch, 'master' set :git_shallow_clone, 1 set :scm_verbose, true set :deploy_to, '/var/www/app' set :deploy_via, :remote_cache 

La parte importante aquí es :deploy_to que es una ruta local en el server, no una ruta SSH . ¡Aquí es donde tu configuration está equivocada !

Esto se vuelve aún más importante si observa los commands que luego capistrano ejecuta. Por ejemplo, generalmente hará cosas como bash cd /var/www/app && bundle instal ... Si la ruta no es local, el command probablemente fallará.

En segundo lugar, esto también significa que Capistrano se desplegará en su server Git desde su server remoto, por lo que debe asegurarse de que el server remoto tenga acceso al server Git. Por lo tanto, ssh_options[:keys] especifica la key SSH local utilizada para conectarse a ese server_remoto, mientras que en el server se ~/.ssh/id_rsa.pub la key pnetworkingeterminada de ~/.ssh/id_rsa.pub .

Puede evitar tener que configurar su key SSH en el server mediante el reenvío de agente SSH incluyendo ssh_options[:forward_agent] = true . Esto simplemente reenviará el socket de su agente SSH local al server y lo usará (bueno, porque su llave nunca abandona su máquina)

Puede encontrar más información sobre el reenvío del Agente SSH aquí

Debilita para verificar:

Compruebe en el server remoto la carpeta .ssh y asegúrese de que su key ssh (id_rsa.pub) se agregue a las keys autorizadas sin espacio adicional.

Haga ssh-add desde su carpeta local desde donde está ejecutando el script de límite.

Compruebe los permissions de la carpeta .ssh en el control remoto, debería ser 700 y los files dentro con 600 permissions.

 If I change the Capistrano configuration to clone from the remote git folder to which I push (which is in that same server) then I don't get an error but it asks for my password every time I try to connect. 

Ahora clonalo del git,