我有一个支持 Rails 7 和 Ruby 3 的 Rails 应用程序,它在我的带有 Ubuntu 22.04、ruby 3.0.2p107 和 Rails 7.0.2.3 的开发机器上运行良好。
现在我正在尝试设置 Capistrano(版本 3.17.0),以便将 Rails 应用程序部署到运行 Ubuntu 22.04 的服务器。但是,由于以下错误,我无法这样做:
SSHKit::Runner::ExecuteError: Exception while executing as username@server: rsa#set_key= is incompatible with OpenSSL 3.0
Capistrano 似乎与 Ubuntu 22.04 中默认的 OpenSSL 库 OpenSSL 3.0 不兼容。我猜这是一个错误,但我没有找到任何报告它的帖子。我也没有找到任何解决方法。
我尝试通过安装 OpenSSL 1.1.1 来解决该问题,但 Rails 应用程序仍然使用 OpenSSL 3。也许解决方案是使用 --with-openssl-dir 选项重新安装带有 OpenSSL 1.1.1 的 ruby 3。
有什么建议吗?
报告的错误是由于rails net-ssh gem 不支持OpenSSL 3.0 导致的。
幸运的是,昨天发布了新版本的 net-ssh gem,提供 OpenSSL 3.0 支持,从而解决了该问题。
基本上,添加
gem 'net-ssh', '7.0.0.beta1'
运行捆绑安装解决了这个问题。
我的临时解决方案是使用 [email protected] 重新安装 Ruby,并且成功了。
rbenv uninstall 3.1.2
brew install [email protected]
RUBY_CONFIGURE_OPTS='--with-openssl-dir=/usr/local/opt/[email protected]' rbenv install 3.1.2
检查 openssl 版本:
ruby -ropenssl -e 'puts OpenSSL::OPENSSL_VERSION'
capistrano 使用我来自
~/.ssh/id_rsa
的 RSA 密钥。
我改用AWS提供的pem文件:
ssh-keygen -y -f in.pem > out.pub
~/.ssh/authorized_keys
以添加来自 out.pub
cap production deploy
:)对我有帮助的是显式安装旧版本的 openssl gem。 我已添加到 Gemfile 中:
gem 'openssl', '<3'
然后运行捆绑安装。
我厌倦了添加
gem 'net-ssh', '7.0.0.beta1'
,但我仍然遇到同样的错误。