古すぎる DSA 形式の暗号鍵で SSH 接続できなくなったので Ed25519 形式で鍵ペアを作成しました

古いサーバをリプレースするために CentOS 8 をインストールした際にトラブルに遭遇。使用していた公開鍵のアルゴリズムが古すぎたことが原因だったので、最新の形式で再作成した手順を記録しておきます。

CentOS 8 で構築したサーバに SSH 接続できない

RLoginエラーメッセージ
RLoginのエラーメッセージ

SSH2 User Auth Failure “publickey,gssapi-keyex,gssapi-with-mic"
Status=1004
Send Disconnect Message…
publickey(ssh-dss), gssapi-with-mic(hogehoge)

サーバに接続した際のエラーメッセージ

CentOS 7 までのサーバには接続できるのに、CentOS 8 のサーバへの接続には失敗してしまいます。Macの方で使用していた鍵ペアでは問題なくログインできるため、使用している鍵ペアが問題なのは間違いなさそう。

secure ログを確認してみると下記のようなエラーメッセージが記録されていました。

$ sudo less /var/log/secure
May 27 08:27:50 host sshd[2535]: userauth_pubkey: key type ssh-dss not in PubkeyAcceptedKeyTypes [preauth]

き、key type ssh-dss not in PubkeyAcceptedKeyTypes ……。ssh-dss 形式の鍵タイプはサポートされていないようです。

OpenSSH 7.0以降は使えなくなってました

はい、しっかりとリリースノートに記載ありました。

Support for ssh-dss, ssh-dss-cert-* host and user keys is disabled by default at run-time. These may be re-enabled using the instructions at http://www.openssh.com/legacy.html

OpenSSH 7.0 was released on 2015-08-11

OpenSSH 7.0 以降の環境では sshdss 鍵は使えないということですね。

現在の環境においては鍵の強度が弱く推奨されないものを今まで使い続けてきたのか。オリジナルの鍵ペアのタイムスタンプ見てみたら2005年だったよ……。

では鍵ペアを作り直しましょう

2020年現在 鍵ペアを作るために使うべきアルゴリズムは?

まずは検索。RSA 2048ビットを使用する作業ログを残しているところが多いですが、調べてみると今どきはより優れた形式があるのですね。

私が利用している環境は、LinuxのディストリビューションだとCentOS 7または 8だったので、心置きなく Ed25519 を利用することにしました。

最初は ECDSA 形式で鍵を作ったのですが使えるなら最も良いものをということで Ed25519 で再作成しました。

ssh-keygen での鍵の作成

ターミナルで作業します。Ed25519 の場合は RSA のようにビット数の指定はいらないのでシンプルですね。

$ ssh-keygen -t ed25519 -C "u1@u-1.net"
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/yuuichi/.ssh/id_ed25519): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/yhori/.ssh/id_ed25519.
Your public key has been saved in /home/yhori/.ssh/id_ed25519.pub.
The key fingerprint is:
SHA256:PMI7amWHpVqwiO2Mx8+L6MupM/r+CmhGCt7R9IOtgLU u1@u-1.net
The key's randomart image is:
+--[ED25519 256]--+
|                 |
|                 |
|   . .           |
|  o =.+..        |
|.= E =oBS        |
|B + + Boo.       |
|+O . *o.         |
|Bo*oo. .         |
|B@*=*.           |
+----[SHA256]-----+

-C オプションはコメントなのであってもなくても良いのですが、念のため追加しています。

RSA と違い256ビット長なので公開鍵も短く済むのは何気にスッキリですね。

authorized_keys に公開鍵を追加

ぶっちゃけこれが一番面倒だったかも。古い暗号鍵で接続した後に ~/.ssh/authorized_keys に新しい公開鍵を追加。

切断後、今度は Ed25519 鍵ペアで接続が問題なくできたら、古い公開鍵の情報を削除。これを管理してるサーバごとにやらなきゃダメだったので面倒は面倒です。

セキュリティ情報ももう少ししっかり収集しないと危険かな

ぶっちゃけSSHで公開鍵認証していればそれなりに安全という認識でしたが、計算機の性能がアップすると古いアルゴリズムで作成された鍵ペアの潜在的な危険性もおろそかにしてはいけないと、認識を改めました。