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 .ssh
diretó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.rb
nã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.ppk
qual é 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 .ppk
arquivo 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.