Host key verification failed(SSH)

SSH接続が「Host key verification failed」で拒否される原因を、サーバー再構築・known_hosts古化・中間者攻撃の可能性に切り分け、フィンガープリント照合と安全な再登録まで最短で解決できる。

応用SSHエラーknown_hostsセキュリティTOFU運用最終更新: 2026-07-28
3つの要点
TL;DR
  1. 相手サーバーが提示したホスト鍵が、手元の known_hosts に記録した鍵と一致しないため接続が中断された状態。SSHが自動で防御している。
  2. 最頻はサーバー再構築やOS再インストールによる鍵変更、次いで known_hosts の古化やIP/ホスト名の使い回し。ただし中間者攻撃の可能性を必ず排除してから対処する。
  3. 正しさを別経路で確認したうえで ssh-keygen -R host で該当行だけ削除し再登録する。警告を握りつぶす設定の常用は厳禁。

一言でいうと(このエラーが何を意味するか)

Host key verification failed. は、接続先サーバーが提示したホスト鍵(サーバーの公開鍵)が、あなたのマシンに保存済みの記録と食い違ったため、SSHクライアントが接続を打ち切ったことを示します。エラーではなく防御が正しく作動した状態です。

SSHはパスワードやユーザー鍵で「あなたが誰か」を認証する前に、まず「相手が本当に以前と同じサーバーか」を確認します。この照合に使うのがクライアント側の ~/.ssh/known_hosts(システム全体では /etc/ssh/ssh_known_hosts)で、初回接続時に受け入れた鍵を記録しておき、次回以降そのフィンガープリントと突き合わせます。今回はそれが一致しませんでした。

典型的な警告は次のように出ます。

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
...
Offending ECDSA key in /home/user/.ssh/known_hosts:12
Host key verification failed.

末尾の known_hosts:12 は「12行目の記録と衝突した」という意味で、後述の削除で使う重要情報です。

ホスト鍵とユーザー鍵は別物

このエラーはサーバーを識別する「ホスト鍵」の話で、あなたがログインに使う「ユーザー鍵(id_ed25519 など)」とは無関係です。Permission denied (publickey) はユーザー認証の失敗であり原因も対処も異なります。混同しないでください。

横にスクロール

SSHホスト鍵不一致を接続先変更と攻撃の可能性から切り分け安全に再登録する手順
警告を無効化せず、実効接続先と新しい指紋を別の信頼経路で確認してから更新する。

よくある原因(複数を具体的に、頻度順)

  • サーバーの再構築・OS再インストールで鍵が変わった(最頻): OSを入れ直すと /etc/ssh/ssh_host_* が再生成され、ホスト鍵が別物になります。クラウドVMの作り直し、コンテナやAMIからの新規起動、sshd の鍵再生成でも同様。IPやホスト名は同じでも中身が別のサーバーなら必ず起きます。
  • known_hosts が古い/使い回しの衝突: DHCPやクラウドでIPが再割り当てされ、以前は別ホストだったIPに繋いでいる。あるいはロードバランサやDNSラウンドロビンの背後で、接続のたびに実体の異なるサーバーへ振られている場合も、記録した1つの鍵と一致しません。
  • 接続先の取り違え・ポート違い: ssh の宛先ホスト名やIPを打ち間違えた、SSHポートフォワード(踏み台のローカルポート転送)越しで別サーバーに繋がっている、といった構成ミス。
  • 中間者攻撃(MITM)の可能性: 頻度は低いものの、けっしてゼロではありません。攻撃者が経路上で偽のサーバーになりすまし、あなたの認証情報や通信を盗もうとしている場合にも同一の警告が出ます。SSHはこの区別ができないため「変わった」とだけ伝えます。心当たりのない環境や公共ネットワークでは、まずこれを疑うのが安全側の判断です。

診断の手順(切り分け方・見るべきログ/コマンド)

鍵が「変わった」こと自体は警告文で確定しています。診断の主眼はその変化が正当か、攻撃かの判定です。手順を飛ばして削除するのが最も危険です。

まず、相手が提示している鍵のフィンガープリントを取得します。-o StrictHostKeyChecking を触らずに、鍵情報だけ見るには次を使います。

# 接続先が今提示しているホスト鍵のフィンガープリントを表示
ssh-keyscan -t ed25519,rsa,ecdsa example.com 2>/dev/null | ssh-keygen -lf -

次に、known_hosts に記録されている旧フィンガープリントを確認します。

# 手元の known_hosts に保存済みのフィンガープリントを表示
ssh-keygen -lf ~/.ssh/known_hosts -F example.com

両者の SHA256:... を比較し、本当に別の鍵に変わっているかを確定させます。そのうえで、新しい鍵が正しいかを必ずSSH以外の経路(アウトオブバンド)で照合します。次のいずれかが信頼できる正解です。

確認したい状況信頼できる照合元見るもの
自分で再構築したサーバー上でローカルに実行`ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub`
クラウドVMコンソールのシリアルログ/システムログ起動時に出力されるホスト鍵フィンガープリント
組織の共有サーバー管理者・構成管理(Ansible等)の記録配布済みの正規フィンガープリント一覧
判断材料が皆無接続を中止し確認できるまで待つ推測で受け入れない
心当たりがなければ攻撃を疑う

自分も管理者もサーバーに変更を加えていないのに鍵が変わったなら、それは中間者攻撃の兆候かもしれません。パスワードやユーザー鍵のパスフレーズを絶対に入力せず、その場では接続を中止し、別経路で正しい鍵を確認できるまで進めないでください。警告を無視して繋ぐと、盗聴中の相手に認証情報を渡す恐れがあります。

解決と予防(対処と再発防止)

新しい鍵が正当だと確認できたら、衝突している該当ホストの記録だけを削除します。known_hosts 全体を消すのは、他のすべてのサーバーの記録まで失い保護を弱めるので避けます。

# 該当ホストの古い記録だけをピンポイントで削除(ホスト名・IP双方)
ssh-keygen -R example.com
ssh-keygen -R 203.0.113.10

ssh-keygen -R は該当行を消し、元の known_hosts を known_hosts.old に退避します。警告文の known_hosts:12 のように行番号が分かる場合、その行を直接消しても構いません。削除後に再接続すると初回扱いとなり、新しい鍵の受け入れを聞かれます。

The authenticity of host 'example.com' can't be established.
ED25519 key fingerprint is SHA256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

ここで先ほど別経路で確認したフィンガープリントと目視照合し、一致した場合のみ yes と答えます。これが再登録です。予防策は次のとおりです。

  • ssh-keygen -R で局所削除: 全消しやファイル手編集の癖をやめ、ホスト単位の削除を習慣化する。
  • 正規フィンガープリントの配布: 組織なら known_hosts を構成管理で配布するか、SSH証明書(CA署名のホスト証明書)を使い、CAを一度信頼すれば個々の鍵登録を不要にする。DNSSEC下の SSHFP レコードで公開する方法もある。
  • 再構築時に鍵を保全する: 意図的な作り直しでは、旧サーバーの /etc/ssh/ssh_host_* を安全に引き継げば、そもそもこのエラーを起こさず運用できる。
StrictHostKeyChecking を no にして黙らせない

StrictHostKeyChecking=noUserKnownHostsFile=/dev/null で警告を恒常的に消す運用は、SSHの防御そのものを無効化し、中間者攻撃を素通りさせます。SSHの信頼モデルはTOFU(Trust On First Use、初回に受け入れた鍵を以後信頼する)であり、その要は「初回の照合」と「変化への警告」です。警告を握りつぶすことは、この安全性の根拠を捨てることに等しいと理解してください。

SSHが依存する公開鍵暗号とフィンガープリント(鍵のハッシュ)の原理はセキュリティを、鍵配送やなりすましが問題になる通信経路の話はネットワークを、known_hosts の探索やファイル権限まわりはOSを参照してください。

試験・面接での頻出ポイント
  • エラーの意味は「保存済みホスト鍵と提示鍵の不一致」で、SSHの防御が作動した状態。ユーザー認証(publickey)の失敗とは別物
  • 最頻原因はサーバー再構築による鍵再生成。ただし中間者攻撃の可能性を排除してから対処する
  • 対処は ssh-keygen -R host で該当記録のみ削除し、別経路で確認した鍵を再登録する
  • SSHの信頼モデルは TOFU。StrictHostKeyChecking=no での黙殺は防御の放棄にあたる

エラー辞典の記事ガイド

Host key verification failed(SSH)を実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

SSH

比較で見る軸

難易度: advanced / カテゴリ: エラー辞典 / タグ数: 6

導入後に効く点

最頻はサーバー再構築やOS再インストールによる鍵変更、次いで known_hosts の古化やIP/ホスト名の使い回し。ただし中間者攻撃の可能性を必ず排除してから対処する。

先に潰すリスク

用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。

数字・仕様の読み方
難易度
advanced
カテゴリ
エラー辞典
タグ数
6

判断チェックリスト

  • 自社の用途が「SSH / エラー」に近いか確認する。
  • 強みである「相手サーバーが提示したホスト鍵が、手元の known_hosts に記録した鍵と一致しないため接続が中断された状態。SSHが自動で防御している。」が本当に評価軸になるか確認する。
  • 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

SSHエラーknown_hostsセキュリティTOFU