Невозможно развернуть приложение Rails для DigitalOcean из-за неподдерживаемого типа ключа
Я сконфигурировал капли в DO и nginx успешно запущен. Я последовал за руководством по DO при развертывании на сервер через Capistrano. Я могу отправить ssh на сервер без ввода моего пароля. Но при запуске bundle exec cap production deploy:initial
я получаю очень странную ошибку:
cap aborted!
NotImplementedError: unsupported key type
пл + LID ���U����X��K\�L�[�\�
�M�\�
�M�A?d��h"sU�Ǐ�2�?h��a 5G͕�E���%!Cg��j�|��tu�yL*�'/9�s۷'
Я использую ключ rsa SSH, и это работает со многими ( > 10) серверами. Я попытался удалить параметр ssh_options
из моего файла deploy/production.rb
. Это должно запрашивать пароль сервера раньше (я предполагаю?). Но я получаю ту же ошибку, которая заставляет меня подозревать, что что-то еще меня отключает.
Версии Gem:
net-ssh (3.2.0)
capistrano (3.6.0)
sshkit (1.11.2)
Ответы
Ответ 1
Я считаю, что вы наткнулись на ошибку в sshkit. В последних версиях sshkit есть собственный механизм загрузки и кэширования ключей SSH, предназначенный для повышения производительности соединения.
Однако кажется, что пользовательская реализация не такая пуленепробиваемая, как стандартная реализация net-ssh, которую она заменяет. В частности, net-ssh молча игнорирует ключи, которые он не поддерживает. Пользовательский ключевой загрузчик sshkit этого не делает, поэтому он взрывается с ошибкой unsupported key type
, которую вы видите.
Если моя теория правильная, тогда вы сможете исправить свою проблему, отключив пользовательский загрузчик sshkit и принудительно используя исходную реализацию net-ssh. Вы можете сделать это, добавив следующее к вашему deploy.rb
:
set :ssh_options, known_hosts: Net::SSH::KnownHosts