Estoy implementando Capistrano en un nuevo servidor y tengo el siguiente problema. Actualmente, no puedo agregar una clave SSH al servidor para iniciar sesión, por lo que debo utilizar la autenticación con contraseña. Sin embargo, tengo una clave para otro servidor guardada en .ssh
el directorio de mi cuenta de usuario local.
Este es el error que aparece cuando intento iniciar sesión:
C:\Web\WebApp1>cap deploy:setup
* executing `deploy:setup'
* executing "mkdir -p /home2/webapp1 /home2/webapp1/releases /home2/webapp1/shared /home2/webapp1/shared/system /home2/webapp1/shared/log /home2/webapp1/shared/pids"
servers: ["myserver.example.com"]
connection failed for: myserver.example.com (OpenSSL::PKey::PKeyError: not a public key "C:/Users/MyAccount/.ssh/id_rsa.pub")
¿Cómo puedo hacer que Capistrano ignore la existencia de la clave que tengo y me permita iniciar sesión con una contraseña? Intenté agregar set :password, "myp@ssw0rd"
y deploy.rb
no ayudó.
ACTUALIZAR
Seguí la respuesta de @sysadmin1138 para agregar lo siguiente al archivo de configuración ssh:
HostName myserver.example.com
PreferredAuthentications=password
PubkeyAuthentication=no
Ahora me sale el error:
connection failed for: myserver.example.com (Net::SSH::AuthenticationFailed: webappuser)
Aunque ni siquiera pide la contraseña. Cuando intenté especificar la contraseña en el archivo de configuración, todavía aparecía el mismo error.
Aquí están las partes relevantes de mi configuración de Capistrano:
role :web, "myserver.example.com"
set :user, "webappuser"
default_run_options[:pty] = true # Allow Capistrano to prompt for passwords
set :deploy_to, "/home2/webapp1"
Respuesta1
Esto probablemente se pueda resolver fuera de Capistrano y en el propio SSH. Configurando un archivo ~/.ssh/config y creando una entrada para su host:
HostName myserver.example.com
PreferredAuthentications=keyboard-interactive
PubkeyAuthentication=no
Capistrano definitivamente solicitará una contraseña si no hay una clave presente, lo he hecho.
Respuesta2
Después de leer el código de Net::SSH::KeyManager
, encontré el problema.
En esta máquina, tengo una clave pública llamadaid_rsa.pub
sinla clave privada correspondiente id_rsa
(porque uso id_rsa.ppk
que es la versión PuTTY del archivo de clave).
Net::SSH::KeyManager
, sin embargo, sólo utilizará una clave siamboslos archivos públicos y privados están en el directorio. Desafortunadamente, esto también significa que si encuentra una clave pública sin la clave privada (o una clave privada sin la clave pública), inmediatamente generará una excepción, en lugar de simplemente descartar la clave.
Después de usar PuTTYgen para exportar la clave privada del .ppk
archivo a un archivo OpenSSH estándar (y luego modifiqué ese archivo de acuerdo conesta respuesta), pude conectarme usando autenticación de contraseña (sinnecesitando el archivo ssh/config como se muestra en otra respuesta).
Nota: Creo que esto es un error en la gema OpenSSH. Tener una clave no válida no debería impedirle utilizar una clave o contraseña diferente.