Forçar Capistrano a pedir senha

Forçar Capistrano a pedir senha

Estou implantando usando Capistrano em um novo servidor e tendo o seguinte problema. Atualmente, não consigo adicionar uma chave SSH ao servidor para efetuar login, portanto, devo usar a autenticação por senha. No entanto, tenho uma chave para outro servidor salva no .sshdiretório da minha conta de usuário local.

Aqui está o erro que recebo quando tento fazer login:

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")

Como posso fazer com que Capistrano ignore a existência da chave que possuo e permita que eu faça login com uma senha? Tentei adicionar set :password, "myp@ssw0rd"e deploy.rbnão ajudou.


ATUALIZAR

Segui a resposta de @ sysadmin1138 para adicionar o seguinte ao arquivo de configuração ssh:

HostName myserver.example.com
    PreferredAuthentications=password
    PubkeyAuthentication=no

Agora, recebo o erro:

connection failed for: myserver.example.com (Net::SSH::AuthenticationFailed: webappuser)

Ele nem pede a senha. Quando tentei especificar a senha no arquivo de configuração, ainda ocorreu o mesmo erro.


Aqui estão as partes relevantes da minha configuração do 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"

Responder1

Provavelmente isso pode ser resolvido fora do Capistrano e no próprio SSH. Configurando um arquivo ~/.ssh/config e criando uma entrada para seu host:

HostName myserver.example.com
    PreferredAuthentications=keyboard-interactive
    PubkeyAuthentication=no

Capistrano definitivamente solicitará uma senha se nenhuma chave estiver presente, eu fiz isso.

Responder2

Depois de ler o código Net::SSH::KeyManager, encontrei o problema.

Nesta máquina, tenho uma chave pública chamadaid_rsa.pub sema chave privada correspondente id_rsa(porque eu uso id_rsa.ppkqual é a versão PuTTY do arquivo de chave).

Net::SSH::KeyManager, no entanto, só usará uma chave seambosos arquivos privados e públicos estão no diretório. Infelizmente, isso também significa que se encontrar uma chave pública sem a chave privada (ou uma chave privada sem a chave pública), lançará imediatamente uma exceção, em vez de apenas descartar a chave.

Depois de usar o PuTTYgen para exportar a chave privada do .ppkarquivo para um arquivo OpenSSH padrão (e então modificar esse arquivo de acordo comesta resposta), consegui me conectar usando autenticação por senha (semprecisando do arquivo ssh/config conforme mostrado em outra resposta).


Nota: acho que isso é um bug na gema OpenSSH. Ter uma chave inválida não deve impedi-lo de usar uma chave ou senha diferente.

informação relacionada