我已经在DO中配置了Droplet,nginx已启动并成功运行。我遵循了关于通过Capistrano部署到服务器的DO指南。我无需输入密码即可进入服务器。但是在运行bundle exec cap production deploy:initial时,我遇到一个非常奇怪的错误:
cap aborted!NotImplementedError: unsupported key type�pl+�lI���D�����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)

最佳答案

我相信您偶然发现了sshkit中的错误。 sshkit的最新版本具有自定义的SSH密钥加载和缓存机制,旨在提高连接性能。

但是,自定义实现似乎不像它所替代的默认net-ssh实现那样防弹。具体来说,net-ssh会静默忽略它不支持的密钥。 sshkit自定义密钥加载器不会执行此操作,因此会因您看到的unsupported key type错误而崩溃。

如果我的理论是正确的,那么您应该能够通过关闭sshkit的自定义密钥加载器并强制使用原始的net-ssh实现来解决问题。您可以通过将以下内容添加到deploy.rb中来实现:

set :ssh_options, known_hosts: Net::SSH::KnownHosts

07-26 09:26