Ruby Net/SSH 7.0.1 - Ubuntu 22 / OpenSSL 3 问题

use*_*945 2 ruby openssl net-ssh ubuntu-22.04

我正在使用 Ubuntu 22 和 OpenSSL 3

当我尝试使用私钥进行连接时,Ruby 的 Net/SSH 就不再工作。

Net::SSH.start X.X.X.X, "root"
/.rvm/gems/ruby-3.1.2/gems/net-ssh-7.0.1/lib/net/ssh/authentication/key_manager.rb:168:in `rescue in sign': the given identity is known, but the private key could not be loaded: OpenSSL::PKey::PKeyError (rsa#set_key= is incompatible with OpenSSL 3.0) (Net::SSH::Authentication::KeyManagerError)                     
/.rvm/gems/ruby-3.1.2/gems/net-ssh-7.0.1/lib/net/ssh/buffer.rb:266:in `set_key': rsa#set_key= is incompatible with OpenSSL 3.0 (OpenSSL::PKey::PKeyError)
Run Code Online (Sandbox Code Playgroud)

我还没有找到任何有用的东西来解决这个问题。只要我使用密码连接,这似乎就可以工作,但是一旦我使用 PEM 密钥,这就会失败。

我在用着:

  • 乌班图22
  • 网络SSH 7.0.1

bil*_*roo 8

在“net-ssh”gem 中修复此问题之前,您可以解决它。对于此解决方案,您必须使用旧的 PEM 格式生成新的 ssh 密钥对。

注意:您可以使用此https://unix.stackexchange.com/questions/638043/how-to-convert-rfc4716-private-keys-to-pem-private将较新的格式转换为较旧的 PEM 格式-keys文章,但我没有测试它。我做了测试,目前正在使用下面的解决方案。

将现有密钥移至保存目录

cd ~
mkdir old_keys
mv id_rsa* old_keys
Run Code Online (Sandbox Code Playgroud)

使用旧的 PEM 格式生成新密钥。

ssh-keygen -m PEM
Run Code Online (Sandbox Code Playgroud)

这对我运行 Ruby (3.0.2-7ubuntu2.1) 和 net-ssh (7.0.1) 和 openssl (3.0.2-0ubuntu1.6) 的 Ubuntu 22.04 安装很有用