RHEL 9やRocky Linux 9で古いsshdサーバに接続できない場合の対処方法
RHEL 9やRocky Linux 9では、セキュリティ強化のため、古い暗号化方式や認証方法が無効化されています。そのため、古いsshdサーバに接続しようとするとエラーが出る場合があります。例えば、次のようなエラーです:
Unable to negotiate with [host] port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss
また、次のエラーが出ることもあります。
ssh_dispatch_run_fatal: Connection to 192.168.1.195 port 22: error in libcrypto
これらのエラーが発生する原因と、その対処方法を以下に説明します。
エラーの原因
エラーは以下の2つに分けて考えることができます。
サーバ側の原因
-
古い鍵交換方式 (
ssh-rsa
,ssh-dss
) の使用: 古いsshdサーバでは、これらのアルゴリズムが使われていることがあります。このため、Unable to negotiate with [host]...
のエラーが発生します。 -
古い暗号化アルゴリズム (
aes128-cbc
,3des-cbc
) の使用: セキュリティの観点から非推奨になっているため、接続が拒否されます。
クライアント側 (RHEL 9やRocky Linux 9) の原因
-
鍵交換方式や暗号化方式が無効化されている: クライアント側でこれらがデフォルト無効化されているため、サーバに接続できず、
error in libcrypto
のエラーが出ます。 - FIPSモードの有効化: FIPSモードでは特定のアルゴリズムしか許可されないため、接続が制限されます。
対処方法
1. サーバを変更できる場合
サーバ側で設定を変更するのが最善の方法です。具体的には、以下のように設定を変更します。
- OpenSSHのバージョンをアップデートする。
- サーバ側の設定ファイル
sshd_config
に必要なアルゴリズムを追加する。
以下の例を参考にしてください:
HostKeyAlgorithms ssh-rsa,ssh-dss
KexAlgorithms diffie-hellman-group1-sha1,diffie-hellman-group14-sha1
Ciphers aes128-cbc,3des-cbc
設定を変更した後、sshd
を再起動します:
sudo systemctl restart sshd
2. クライアント側で対応する場合
サーバを変更できない場合、クライアント側の設定を調整します。
2-1. 設定ファイルで有効化
SSHの設定ファイル (~/.ssh/config
または /etc/ssh/ssh_config
) に以下を追加します。
Host [対象サーバのホスト名またはIPアドレス]
HostKeyAlgorithms +ssh-rsa
PubkeyAcceptedKeyTypes +ssh-rsa
KexAlgorithms +diffie-hellman-group1-sha1,diffie-hellman-group14-sha1
-
HostKeyAlgorithms
: サーバが使うホスト鍵のアルゴリズムを追加します。 -
PubkeyAcceptedKeyTypes
: クライアント側で許可する公開鍵アルゴリズムを指定します。 -
KexAlgorithms
: 古い鍵交換アルゴリズムを追加します。
2-2. コマンドで一時的に対応
設定ファイルを変更したくない場合、SSHコマンドにオプションを指定して接続します。
ssh -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedKeyTypes=+ssh-rsa \
-o KexAlgorithms=+diffie-hellman-group1-sha1,diffie-hellman-group14-sha1 [ユーザー名]@[対象サーバ]
2-3. 暗号化方式を追加
暗号化方式が原因で接続できない場合、以下の設定を追加します:
Host [対象サーバのホスト名またはIPアドレス]
Ciphers +aes128-cbc,3des-cbc
2-4. ポリシーを変更する
RHEL 9では、暗号化ポリシーを一時的に変更するコマンドを利用できます。以下のコマンドを実行すると、SHA-1を含む古いアルゴリズムが有効になります:
sudo update-crypto-policies --set DEFAULT:SHA1
この設定を変更すると、古い暗号化方式も使用可能になります。ただし、セキュリティリスクが高まるため、一時的な利用にとどめ、不要になったらデフォルトに戻すことを推奨します。
元に戻すには以下を実行します:
sudo update-crypto-policies --set DEFAULT
2-5. FIPSモードを確認
FIPSモードが有効になっている場合、以下のコマンドで確認できます:
cat /proc/sys/crypto/fips_enabled
-
1
: 有効 -
0
: 無効
FIPSモードが有効な場合、必要に応じて無効化し、再起動が必要です。
注意点
古い暗号化方式や鍵交換方式を有効化すると、セキュリティリスクが高まります。可能であれば、サーバ側の更新を検討してください。また、設定を変更する際は、影響を最小限にするため、特定のホストにのみ適用するようにしましょう。
まとめ
RHEL 9やRocky Linux 9で古いsshdサーバに接続するには、以下の方法で対応可能です。
- サーバまたはクライアント側の設定を変更して古いアルゴリズムを有効化する。
- 必要に応じてFIPSモードを無効化する。
ただし、セキュリティ上の理由から、可能な限りサーバのアップデートを推奨します。