Назад | Перейти на главную страницу

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

Я развертываю использование 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"

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

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

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

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

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

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

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


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