録画マシンとしてRaspberry Piを利用しているのですが、別の用途で利用したいので別の使っていないマシンに切り替えることにしました。 ちょうどUbuntu 22.04 LTSが公開されたタイミングだったのでそちらを用いることにしたのですが、SSHの鍵認証で躓いて30分ほど悩んだので備忘録。
鍵認証でエラーが出る
普段それほどLinuxを使ってないので手順を思い出しながらホームディレクトリに.sshディレクトリを作成し、公開鍵を配置して名前を authorized_keys
に変更、sshd_configを編集してパスワード認証を無効化してサービスを再起動し、現在のセッションは維持しながら別途鍵認証でのログインを試したところ、下記のエラーが発生。
SSH2 User Auth Failure publickey status 0004
これまでも使っている鍵ファイルなので、何か手順間違えたかな?と思って再度試すも同じエラーが発生。
SHA-1 RSA認証が無効化されている
らちが明かないので認証ログ(/var/log/auth.log)をチェック。
すると
userauth_pubkey: key type ssh-rsa not in pubkeyacceptedalgorithms [preauth]
というエラーが出ていることが判明。
検索してみたところ、Ubuntu 22.04 LTSで採用されているOpen SSHはOpenSSH_8.9p1。
そしてひとつ前のバージョンである、Open SSH 8.8の段階でSSH-1アルゴリズムによるRSA認証が無効化されたとのこと。
https://www.openssh.com/txt/release-8.8
どうやら私が使っていた鍵はずいぶん前から使っていたものだったので、SHA-1アルゴリズムを採用したRSA鍵だった模様。
下記の通りsshd_configに追加してやれば今の鍵でも利用できる模様。
PubkeyAcceptedAlgorithms=+ssh-rsa
ただ、新しく作るサーバーマシンなので今回は鍵を改めて作成することで対応しました。
Ed25519アルゴリズム
上記の記事によると、
- SHA-2アルゴリズムを利用するRSA(rsa-sha2-256/512)
- ED25519アルゴリズム(ssh-ed25519)
- RFC5656 ECDSAアルゴリズム(ecdsa-sha2-nistp256/384/521)
が代替手段として挙げられている模様。
今回はせっかくなのでRSA以外で行くことにしました。
利用したのはED25519。
下記の通りssh-keygenで作成するだけ。
ssh-keygen -t ed25519
実行すれば
- id_ed25519(秘密鍵)
- id_ed25519.pub(公開鍵) の二つが作成されます。
あとはこれまで通り公開鍵の中身を ~/ssh/authorized_keys
に追加してやればOK。