由于不支持的密钥类型,无法将Rails应用程序部署到DigitalOcean

tek*_*ina 11 ssh capistrano ruby-on-rails digital-ocean capistrano3

我已在DO中配置了Droplet,nginx已启动并成功运行.我在DO上通过Capistrano部署到服务器的指南.我可以在不输入密码的情况下进入服务器.但在运行时,bundle exec cap production deploy:initial我得到一个非常奇怪的错误:

cap aborted! NotImplementedError: unsupported key typePL +盖???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文件中删除param .这应该在之前询问服务器密码(我猜?).但是我得到了同样的错误,导致我怀疑其他东西正在绊倒我.

宝石版本:

net-ssh (3.2.0) capistrano (3.6.0) sshkit (1.11.2)

Mat*_*son 2

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

然而,自定义实现似乎并不像它所取代的默认 net-ssh 实现那么安全。具体来说,net-ssh 将默默地忽略它不支持的密钥。unsupported key typesshkit 自定义密钥加载器不会执行此操作,因此它会因您看到的错误而崩溃。

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

set :ssh_options, known_hosts: Net::SSH::KnownHosts
Run Code Online (Sandbox Code Playgroud)