Forçar Capistrano a pedir senha

3

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

Aqui está o erro que recebo quando tento efetuar 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 faço para que o Capistrano ignore a existência da chave que eu tenho e me permita entrar com uma senha? Eu tentei adicionar set :password, "myp@ssw0rd" a deploy.rb e isso não ajudou.

UPDATE

Eu segui a resposta do @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 mesmo pede a senha. Quando tentei especificar a senha no arquivo de configuração, ela ainda deu 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"
    
por Moshe Katz 29.08.2012 / 04:55

2 respostas

2

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

Nesta máquina, tenho uma chave pública denominada id_rsa.pub sem a chave privada correspondente id_rsa (porque eu uso id_rsa.ppk , que é a versão PuTTY do arquivo-chave).

Net::SSH::KeyManager , no entanto, usará somente uma chave se ambos os arquivos públicos e privados estiverem 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), ela lançará imediatamente uma exceção, em vez de simplesmente descartar a chave.

Depois de usar o PuTTYgen para exportar a chave privada do arquivo .ppk para um arquivo OpenSSH padrão (e, em seguida, modifiquei esse arquivo de acordo com esta resposta ), eu era capaz de conectar usando autenticação de senha ( sem precisando do arquivo ssh / config como mostrado em outra resposta).

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

    
por 30.08.2012 / 04:23
3

Isso provavelmente é solucionável fora do Capistrano e no próprio SSH. Configurando um arquivo ~ / .ssh / config e criando uma entrada para o seu host:

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

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

    
por 29.08.2012 / 05:09