Заставить Capistrano запросить пароль

Заставить Capistrano запросить пароль

Я развертываю Capistrano на новом сервере и столкнулся со следующей проблемой. В настоящее время я не могу добавить ключ SSH на сервер для входа, поэтому мне приходится использовать аутентификацию по паролю. Однако у меня есть ключ для другого сервера, сохраненный в .sshкаталоге моей локальной учетной записи пользователя.

Вот ошибка, которую я получаю при попытке входа в систему:

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

Как мне заставить Capistrano игнорировать существование моего ключа и разрешить мне войти с паролем? Я пробовал добавлять, set :password, "myp@ssw0rd"но deploy.rbэто не помогло.


ОБНОВЛЯТЬ

Я последовал ответу @sysadmin1138 и добавил следующее в файл конфигурации ssh:

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

Теперь я получаю ошибку:

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

Хотя он даже не запрашивает пароль. Когда я попытался указать пароль в файле конфигурации, он все равно выдал ту же ошибку.


Вот соответствующие части моей конфигурации 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"

решение1

Вероятно, это можно решить вне Capistrano и в самом SSH. Настройка файла ~/.ssh/config и создание записи для вашего хоста:

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

Capistrano обязательно запросит пароль, если ключ отсутствует, я так и делал.

решение2

Прочитав код Net::SSH::KeyManager, я нашел проблему.

На этой машине у меня есть открытый ключ с именемid_rsa.pub безсоответствующий закрытый ключ id_rsa(потому что я использую id_rsa.ppkверсию файла ключа PuTTY).

Net::SSH::KeyManager, однако, будет использовать ключ только еслиобафайлы private и public находятся в каталоге. К сожалению, это также означает, что если он найдет открытый ключ без закрытого ключа (или закрытый ключ без открытого ключа), он немедленно выдаст исключение, вместо того чтобы просто отбросить ключ.

После того, как я использовал PuTTYgen для экспорта закрытого ключа из .ppkфайла в стандартный файл OpenSSH (а затем изменил этот файл в соответствии сэтот ответ), мне удалось подключиться, используя аутентификацию по паролю (безнужен файл ssh/config, как показано в другом ответе).


Примечание: Я думаю, что это ошибка в OpenSSH gem. Наличие одного недействительного ключа не должно помешать вам использовать другой ключ или пароль.

Связанный контент