- 技術 💻
REMOTE HOST IDENTIFICATION HAS CHANGEDの対処
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! は、以前に接続したときと、サーバーの「ホスト鍵」(サーバーの身分証明にあたる鍵)が変わっているときに、SSH が接続を止める警告です。 原因は2つで、どちらなのかを確かめてから対処します。
| 原因 | よくある状況 | 対処 |
|---|---|---|
| サーバーのホスト鍵が正当に変わった | サーバーを作り直した・OS を入れ直した・同じ IP アドレスに別のサーバーを立てた | 新しい鍵のフィンガープリントを確かめてから、ssh-keygen -R で以前の記録を消す |
| 別のサーバーに接続させられている(なりすまし) | 心当たりが無い | 接続しない。管理者・ネットワークの担当に連絡する |
「消せば直る」のは、1つ目が確かなときだけです。警告の文面も、なりすましの可能性を最初に挙げています。
確認環境:OpenSSH 9.6(Ubuntu 24.04)、ローカルの SSH サーバー(確認日 2026年10月11日)。一度接続したあと、サーバーのホスト鍵を別の鍵に差し替えて再現しました。
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「REMOTE HOST IDENTIFICATION HAS CHANGEDの対処」
再現:ホスト鍵を作り直したサーバーに接続
$ ssh -p 2222 dev@127.0.0.1
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ 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)!
It is also possible that a host key has just been changed.
The fingerprint for the ED25519 key sent by the remote host is
SHA256:H3U2VsJcqTg/2h4s0DWyC6KufxjFJzcQ8QObh9bKr4c.
Please contact your system administrator.
Add correct host key in /home/dev/.ssh/known_hosts to get rid of this message.
Offending ED25519 key in /home/dev/.ssh/known_hosts:1
remove with:
ssh-keygen -f '/home/dev/.ssh/known_hosts' -R '[127.0.0.1]:2222'
Host key for [127.0.0.1]:2222 has changed and you have requested strict checking.
Host key verification failed.
| 部分 | 意味 |
|---|---|
The fingerprint ... is SHA256:H3U2... |
今つながろうとしているサーバーの鍵のフィンガープリント |
Offending ED25519 key in .../known_hosts:1 |
以前の記録が、known_hosts の 1行目にある |
remove with: ssh-keygen ... -R '[127.0.0.1]:2222' |
以前の記録を消すコマンド |
Host key verification failed. |
接続を止めた |
手順1:本当にサーバーの鍵が変わったのか確かめる
エラー文に出たフィンガープリントと、サーバーの本当のフィンガープリントを比べます。 本当のフィンガープリントは、SSH 以外の経路で確かめます。
| 確かめ方 | コマンド・方法 |
|---|---|
| サーバーにログインできる人に聞く・コンソールで確かめる | サーバーで ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub |
| クラウドの管理画面 | サーバーのコンソールの出力・ログに、ホスト鍵のフィンガープリントが出ることがある |
| 作り直した本人が、作業の記録で確かめる | サーバーを作り直した・OS を入れ直した事実があるか |
(サーバー側)
$ ssh-keygen -lf hk2.pub
256 SHA256:H3U2VsJcqTg/2h4s0DWyC6KufxjFJzcQ8QObh9bKr4c root@vm (ED25519) ← エラー文の値と一致
確認環境では、差し替えた新しい鍵のフィンガープリントが、エラー文の SHA256:H3U2... と一致しました。一致すれば、正当に変わったと判断できます。
ssh-keyscan でも今のサーバーの鍵を取得できますが、これは今つながっている相手(なりすましかもしれない相手)から取得するので、確かめる手段にはなりません。
$ ssh-keyscan -p 2222 -t ed25519 127.0.0.1 | ssh-keygen -lf -
256 SHA256:H3U2VsJcqTg/2h4s0DWyC6KufxjFJzcQ8QObh9bKr4c [127.0.0.1]:2222 (ED25519)
手順2:以前の記録を消す(ssh-keygen -R)
$ ssh-keygen -R '[127.0.0.1]:2222'
# Host [127.0.0.1]:2222 found: line 1
/home/dev/.ssh/known_hosts updated.
Original contents retained as /home/dev/.ssh/known_hosts.old
エラー文の remove with: の行をそのまま実行すれば消せます。消す前の内容は known_hosts.old に残ります。ポートが 22 以外なら、[ホスト]:ポート の形で指定します。
| 接続のしかた | -R に指定する名前 |
|---|---|
ssh user@server.example.com |
server.example.com |
ssh user@192.0.2.10 |
192.0.2.10 |
ssh -p 2222 user@127.0.0.1 |
'[127.0.0.1]:2222' |
ホスト名と IP アドレスの両方で接続したことがあるなら、記録はそれぞれ別なので、両方を消します。
known_hosts を開いても、ホスト名が見えない
$ cat ~/.ssh/known_hosts
|1|jWNEhnYVgleja1besm2dXB9Bd40=|5cwIOkDQg7Q8/b3emjp0LQMh29c= ssh-ed25519 AAAA...
Ubuntu の設定では、known_hosts のホスト名がハッシュ化(読めない形に変換)されていました。エディタで探すのではなく、ssh-keygen -F で探し、ssh-keygen -R で消します。
$ ssh-keygen -F '[127.0.0.1]:2222'
# Host [127.0.0.1]:2222 found: line 1
手順3:もう一度接続して、新しい鍵を記録する
$ ssh -p 2222 dev@127.0.0.1
The authenticity of host '[127.0.0.1]:2222 ([127.0.0.1]:2222)' can't be established.
ED25519 key fingerprint is SHA256:H3U2VsJcqTg/2h4s0DWyC6KufxjFJzcQ8QObh9bKr4c.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '[127.0.0.1]:2222' (ED25519) to the list of known hosts.
ここで表示されるフィンガープリントが、手順1で確かめたものと同じかをもう一度見てから yes と答えます。確かめたフィンガープリントを yes の代わりに貼り付けると、確認環境では、一致したときは接続され、違う値では Please type 'yes', 'no' or the fingerprint: と聞き直されました。
StrictHostKeyChecking=no にしない
$ ssh -o StrictHostKeyChecking=no -p 2222 dev@127.0.0.1
...(警告は出る)
Password authentication is disabled to avoid man-in-the-middle attacks.
Keyboard-interactive authentication is disabled to avoid man-in-the-middle attacks.
connected-no ← 鍵が変わっていても、公開鍵の認証で接続できてしまった
StrictHostKeyChecking=no にすると、ホスト鍵が変わっていても接続が進みました。 パスワードでのログインは止められましたが、公開鍵の認証では接続できています。なりすましの相手に接続しても気づけないため、警告を消すためにこの設定を使うのは避けます。
| 設定 | 新しいサーバー | 鍵が変わったサーバー |
|---|---|---|
ask(既定) |
確認してから記録 | 止める |
accept-new |
自動で記録 | 止める |
yes |
記録しない(止める) | 止める |
no |
自動で記録 | 一部の制限つきで接続が進む(確認環境では公開鍵の認証で接続できた) |
自動化(CI・スクリプト)で初回の確認を省きたいなら、accept-new を使います。新しいサーバーは自動で記録し、鍵が変わったときは止めます(OpenSSH のマニュアル)。
確認の手順(チェックリスト)
| 順番 | 確認すること | 方法 |
|---|---|---|
| 1 | 心当たりがあるか | サーバーの作り直し・OS の入れ直し・IP アドレスの付け替え |
| 2 | フィンガープリント | エラー文の値と、SSH 以外の経路で確かめた値を比べる |
| 3 | 一致しない・心当たりが無い | 接続しない。管理者に連絡する |
| 4 | 一致した | エラー文の ssh-keygen ... -R ... で以前の記録を消す |
| 5 | もう一度接続 | 表示されるフィンガープリントを見てから yes |
| 6 | 自動化 | StrictHostKeyChecking=accept-new(no は使わない) |
よくある質問
Q. known_hosts を丸ごと消してもよいですか。
A. 消せば警告は出なくなりますが、ほかのすべてのサーバーの記録も消え、次に接続したときに、どのサーバーについても本物かを確かめ直すことになります。対象のサーバーの行だけを ssh-keygen -R で消します。
Q. Windows(PowerShell)でも同じですか。
A. Windows の OpenSSH も、C:\Users\ユーザー名\.ssh\known_hosts に記録します。ssh-keygen -R ホスト名 で同じように消せます。
まとめ
- サーバーの身分証明にあたるホスト鍵が、以前と違うときの警告
- 原因はサーバーの作り直しかなりすまし。消す前に、どちらかを確かめる
- エラー文のフィンガープリントと、SSH 以外の経路で確かめた値を比べる(
ssh-keyscanは確かめる手段にならない) - 一致したら、エラー文の
ssh-keygen -Rをそのまま実行。known_hosts はハッシュ化されていることがある StrictHostKeyChecking=noは、鍵が変わっていても接続が進む。自動化はaccept-new
参考・出典
確認日はいずれも 2026年10月11日です。
- OpenBSD manual pages「ssh_config(5)」(StrictHostKeyChecking):https://man.openbsd.org/ssh_config#StrictHostKeyChecking
本記事の内容は、ご自由にお使いください。
ご利用の際は、出典として本ページへのリンクを記載いただけますようお願いします。
(記載例)出典:株式会社RJC「REMOTE HOST IDENTIFICATION HAS CHANGEDの対処」
株式会社RJC ― SI事業・SES事業・AI駆動開発。RJCは一緒に成長を楽しめる会社です。
WE ARE HIRING
RJCで一緒に開発しながら、
成長を楽しみませんか?
RJCは、Web・モバイル・AIを活用した開発プロジェクトで、テックリードやPM・PMOも活躍するシステム開発会社です。会社を知る、待遇を確かめる、話を聞いてみる。気になるところ見てみてください!
- 127日年間休日
- 12時間平均残業時間
- 毎日ガチャ遊びココロも大切にする福利厚生。アマギフなどの賞品ラインナップ!
ほかにも、チケットレストラン、書籍読み放題、2年ごとの慰労報奨(休暇 or 金一封)、11期連続の黒字決算。