Невозможно развернуть приложение 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