概要
古いSSHサーバー(MySQLの踏み台サーバーなど)に接続しようとすると、次のようなエラーが出ることがあります。
Unable to negotiate with 192.168.XXX.XXX port 22: no matching host key type found.
Their offer: ssh-rsa,ssh-dss
(日本語訳)
192.168.XXX.XXX(ポート22)との交渉に失敗しました:一致するホスト鍵の種類が見つかりません。
相手側が提示した鍵の種類:ssh-rsa、ssh-dss
このエラーは、接続先のSSHサーバーが古い鍵アルゴリズム(ssh-rsa
やssh-dss
)のみをサポートしており、クライアント側がそれらを許可していないために発生します。
ssh-rsa
および ssh-dss
はともにセキュリティ上の理由から、OpenSSH 8.8以降ではデフォルトで無効化されています。
補足(技術的背景)
■ssh-rsa
署名に使われるSHA-1が脆弱なため、衝突攻撃のリスクが現実的になり、OpenSSH 8.8以降でデフォルト無効化。
■ssh-dss(DSA)
安全なハッシュ関数が使えず、鍵長も短いため、OpenSSHでは完全に非推奨。ssh-rsa
より危険。
対処法
以下のように ~/.ssh/config
に接続設定を追加することで、一時的に ssh-rsa
を許可して接続できるようになります。
Host 192.168.XXX.XXX
HostKeyAlgorithms +ssh-rsa # サーバーのホスト鍵としてssh-rsaを許可
PubkeyAcceptedAlgorithms +ssh-rsa # クライアント認証にもssh-rsaを許可
各設定の意味:
-
Host
:この設定を適用する対象ホスト(IPアドレス)を指定。 -
HostKeyAlgorithms
:サーバーのホスト鍵にssh-rsa
を追加で許可。 -
PubkeyAcceptedAlgorithms
:クライアントの公開鍵認証にもssh-rsa
を追加で許可。
公開鍵の種類や認証方式に応じて記述してください。
セキュリティ注意
この設定は「古いサーバーへの接続を許可するための一時的対応」です。
可能であれば、サーバー側のSSHバージョンアップや、より安全な鍵方式(例:ed25519)への移行を検討してください。