環境
Ubuntu20.4
Ruby2.7
はじめに
SSHの認証で利用していた鍵をRSAからED25519に変更して作り直したところ、Rubyで利用しているnet-sshのgemでエラーが発生したためそのトラブルシューティング記事です。
内容
エラー内容は次の通りです。
OpenSSH keys only supported if ED25519 is available (NotImplementedError)
net-ssh requires the following gems for ed25519 support:
* ed25519 (>= 1.2, < 2.0)
* bcrypt_pbkdf (>= 1.0, < 2.0)
See https://github.com/net-ssh/net-ssh/issues/565 for more information
Gem::MissingSpecError : "Could not find 'ed25519' (~> 1.2) among 70 total gem(s)
Checked in 'GEM_PATH=/root/.gem/ruby/2.7.0:/var/lib/gems/2.7.0:/usr/lib/ruby/gems/2.7.0:/usr/share/rubygems-integration/2.7.0:/usr/share/rubygems-integration/all:/usr/lib/x86_64-linux-gnu/rubygems-integration/2.7.0', execute `gem env` for more information"
net-sshを使ってSSH接続する場合、RSAを使って作成したキーで認証する分には普通に通るのだが、ED25519を使って作成したキーで認証を行う場合、別途、ed25519とbcrypt_pbkdfというgemの依存関係が浮上してきます。
ed25519とbcrypt_pbkdfは、net-sshをgem installでインストールしただけでは標準では入ってきません。
RSAがまだ一般的でED25519の方はまだ市民権を得ていないからなのでしょうか。セキュリティのことを考えると、RSAを使っているようであれば、早いことED25519に切り替えた方がいいことは確かです。
次のようにed25519とbcrypt_pbkdfをそれぞれインストールします。エラーメッセージの中にバージョンの指定が記載されていたため、言われた通りのバージョンでインストールしました。
指定されたバージョンの範囲以内であればどのバージョンでもいいと思いますが、一応、一番大きいマイナーバージョンでインストールしました。
$gem install ed25519 -v '1.2.4'
$gem install bcrypt_pbkdf -v '1.0.0'
インストールされたことを確認します。
$gem list | grep -E '^ed|^bcry'
bcrypt_pbkdf (1.0.0)
ed25519 (1.2.4)
この後、Rubyのプログラムを流したら、エラーは回避されました。
補足
この記事を書いた時点のnet-sshの最新バージョンは7.3.0です。7.3.0版のnet-sshをインストールしても標準でed2559、bcrypt_pbkdfが一緒にインストールされるようなことはありません。いずれ、ED25519が市民権を得た日にはRuntime依存関係として一緒にインストールされる日もくるかなと想定しております。