Я развертываю использование 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. Наличие одного недействительного ключа не должно мешать вам использовать другой ключ или пароль.