Capistrano 由于与 OpenSSL 3.0 不兼容而无法部署 Rails 应用程序

问题描述 投票:0回答:5

我有一个支持 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。

有什么建议吗?

ruby-on-rails ruby openssl capistrano ubuntu-22.04
5个回答
33
投票

报告的错误是由于rails net-ssh gem 不支持OpenSSL 3.0 导致的。

幸运的是,昨天发布了新版本的 net-ssh gem,提供 OpenSSL 3.0 支持,从而解决了该问题。

基本上,添加

gem 'net-ssh', '7.0.0.beta1'

运行捆绑安装解决了这个问题。


1
投票

我的临时解决方案是使用 [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'

0
投票

capistrano 使用我来自

~/.ssh/id_rsa
的 RSA 密钥。

我改用AWS提供的pem文件:

  • 从 pem 文件生成公钥
    ssh-keygen -y -f in.pem > out.pub
  • 在服务器上编辑
    ~/.ssh/authorized_keys
    以添加来自
    out.pub
  • 的公钥
  • cap production deploy
    :)

0
投票

对我有帮助的是显式安装旧版本的 openssl gem。 我已添加到 Gemfile 中:

gem 'openssl', '<3'

然后运行捆绑安装。


-2
投票

我厌倦了添加

gem 'net-ssh', '7.0.0.beta1'
,但我仍然遇到同样的错误。

© www.soinside.com 2019 - 2024. All rights reserved.