トラブルシューティング

SSH「no matching host key type found」:原因と直し方

最新の OpenSSH は ssh-rsa(SHA-1)をデフォルトで無効化したため、レガシーサーバーはネゴシエーションに失敗します。HostKeyAlgorithms=+ssh-rsa でホストごとに通し、鍵交換/暗号エラーにも同じ修正を ── そして本当の解決:サーバーをアップグレードすること。

CC Chen Chen· 創業者·2026年6月24日·6 分で読めます

「no matching host key type found」の意味

SSH クライアントとサーバーが暗号アルゴリズムについて合意できなかったため、接続が始まりません。2026 年でよくある理由は次のとおりです:最新のクライアントが、古いサーバーが今も頼っている旧式で脆弱なアルゴリズムを無効化したから。OpenSSH 8.8 以降では ssh-rsa(SHA-1)署名がデフォルトで無効になっており、レガシーなサーバー・ルーター・NAS・スイッチはそれより新しいものを提示できないことがよくあります。すぐに通すにはフラグを 1 つ。本当の解決はサーバーをアップグレードすることです。

このエラーの 3 つのバリエーション

エラー合意できなかったもの
no matching host key type found. Their offer: ssh-rsaホスト鍵の署名アルゴリズム
no matching key exchange method found. Their offer: diffie-hellman-group1-sha1鍵交換(KEX)
no matching cipher found暗号化アルゴリズム

3 つとも同じ話です ── サーバーが、クライアントが安全でないとして引退させたアルゴリズムしか提示しないのです。Their offer: の部分が、サーバーがどの非推奨アルゴリズムから抜け出せていないかを正確に教えてくれます。

すぐに通す方法(接続ごと)

その特定の古いアルゴリズムを、このホストだけで再び有効にします。最もよくある ssh-rsa のケース:

ssh -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedAlgorithms=+ssh-rsa user@host

古い鍵交換や暗号の場合は、これに相当します:

ssh -o KexAlgorithms=+diffie-hellman-group1-sha1 user@host
ssh -o Ciphers=+aes128-cbc user@host

他の場所のセキュリティを弱めずに、特定の 1 台のホストで恒久的に効かせるには、~/.ssh/config に書きます:

Host old-nas
    HostName 192.168.1.10
    HostKeyAlgorithms +ssh-rsa
    PubkeyAcceptedAlgorithms +ssh-rsa

本当の解決:サーバーをアップグレードする

+ssh-rsa フラグは回避策であって、解決策ではありません ── これらのアルゴリズムは破られているから無効化されたのです。長続きする解決は、サーバーに最新のアルゴリズムを提示させることです:

  • サーバーの OpenSSH を更新する(最新の OpenSSH は Ed25519 と rsa-sha2-256/512 を自動的に提示します)。
  • ホスト鍵がない場合は最新のホスト鍵を生成するsudo ssh-keygen -A で Ed25519 を含むホスト鍵を再生成します。
  • 更新できないアプライアンス(古いルーター・NAS・スイッチ)については、ホストごとの ~/.ssh/config 例外が現実的な妥協です ── 弱いアルゴリズムをその 1 台だけに限定します。

スマホでは

最新のモバイルクライアントはデフォルトで最新のアルゴリズムをネゴシエートします ── セキュリティには良いことですが、レガシー機器に対しては同じ壁に当たることを意味します。2 つが役立ちます:どんなサーバーでもサポートしていれば ssh-rsa 署名の問題を完全に回避できる Ed25519 鍵を優先すること(TermAI が生成してくれます)。そして本当に古い機器には、接続ごとにアルゴリズムオプションを設定できるクライアントが、~/.ssh/config と同じ脱出口を与えてくれます。

スマホから最新アルゴリズムで接続された SSH セッション
最新のクライアントは強力なアルゴリズム(Ed25519、rsa-sha2)をデフォルトにします ── セキュリティには最高ですが、レガシーサーバーは接続するために限定的な互換オプションが必要になることがあります。

FAQ

「no matching host key type found」はどう直しますか?
ssh コマンドに -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedAlgorithms=+ssh-rsa を追加するか、~/.ssh/config の Host ブロック内に同じ行を書きます。長期的には、サーバーの OpenSSH を更新してください。

クライアントを更新した後になぜ壊れたのですか?
OpenSSH 8.8 以降が旧式の ssh-rsa(SHA-1)アルゴリズムをデフォルトで無効化したからです。それしか提示しないサーバーは、再び有効化するかアップグレードするまでネゴシエーションに失敗します。

ssh-rsa を再び有効にしても安全ですか?
最新のアルゴリズムより弱いので、グローバルに有効化するのではなく、それを必要とする特定のレガシーホストに限定すべきです。正しい解決はサーバーをアップグレードすることです。

host key verification failed との違いは?
このエラーはどのアルゴリズムが使えるか(ネゴシエーション)に関するものです。Host key verification failed はサーバーの身元鍵が変わったことに関するものです。

クイックファクト

  • 意味:クライアントとサーバーに受け入れ可能な共通アルゴリズムがない ── 通常は最新のクライアント対レガシーサーバー
  • 原因:OpenSSH 8.8 以降が ssh-rsa(SHA-1)などの弱いアルゴリズムをデフォルトで無効化した
  • すぐに通す-o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedAlgorithms=+ssh-rsa(~/.ssh/config でホストごとに限定)
  • 本当の解決:サーバーの OpenSSH を更新する。ssh-keygen -A でホスト鍵を再生成する
  • 回避する:サポートしているサーバーでは Ed25519 鍵を使う(TermAI が生成します)
Try TermAI

Free on iOS and Android. 5 AI requests/day on the free tier, plus unlimited SSH/SFTP and built-in Tailscale.

CC
Chen Chen — Founder of TermAI

Writes about mobile DevOps, terminal UX, and the surprising depth of "boring" infrastructure.

Was this useful? ← Back to blog