SSHのホスト鍵とは?サーバ認証の仕組みと役割をわかりやすく解説

SSHのホスト鍵とは?

SSHホスト鍵の仕組みを理解して安全なサーバ接続を実現しよう

SSHを学習していると、「ホスト鍵」という言葉を目にする機会があります。

公開鍵認証やauthorized_keysは理解していても、ホスト鍵の役割まで正しく理解している方は意外と多くありません。

しかしSSHの安全性を支えている重要な仕組みの一つがホスト鍵です。

SSHでは利用者を認証するだけでなく、「接続先サーバが本物であること」を確認する必要があります。

その役割を担っているのがホスト鍵です。

本記事ではSSHホスト鍵の仕組みや役割、管理方法について詳しく解説します。

ホスト鍵とは何か

ホスト鍵とは、SSHサーバ自身を識別するための鍵ペアです。

利用者の公開鍵認証とは別に存在します。

SSHサーバをインストールすると自動生成されることが一般的です。

ホスト鍵には以下の2種類があります。

  • ホスト秘密鍵
  • ホスト公開鍵

これらによってサーバの本人確認を行います。

なぜホスト鍵が必要なのか

SSHでは通信内容を暗号化できます。

しかし暗号化だけでは十分ではありません。

例えば攻撃者が偽のSSHサーバを構築した場合、利用者は本物だと思って接続してしまう可能性があります。

すると認証情報を盗まれる危険があります。

このような攻撃を中間者攻撃(Man in the Middle Attack)と呼びます。

ホスト鍵はこの攻撃を防ぐために利用されています。

SSHには2種類の認証がある

SSHでは実は2つの認証が行われています。

認証対象利用する鍵
サーバ認証ホスト鍵
ユーザー認証公開鍵認証・パスワード認証

多くの初心者はユーザー認証だけに注目しますが、サーバ認証も非常に重要です。

ホスト鍵はどこに保存されるのか

OpenSSH Serverでは通常以下の場所に保存されています。

/etc/ssh/

代表的なファイルです。
ssh_host_ed25519_key
ssh_host_ed25519_key.pub

ssh_host_rsa_key
ssh_host_rsa_key.pub

ssh_host_ecdsa_key
ssh_host_ecdsa_key.pub

秘密鍵と公開鍵がペアで存在します。

ホスト秘密鍵とホスト公開鍵

ホスト秘密鍵です。
ssh_host_ed25519_key

ホスト公開鍵です。
ssh_host_ed25519_key.pub

秘密鍵はサーバ内部のみで利用します。

公開鍵はクライアントがサーバを識別するために利用します。

初回接続時に何が起きているのか

初めてSSH接続する際、次のようなメッセージが表示されます。

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

これはサーバのホスト公開鍵を確認している状態です。

利用者が「yes」を入力すると、そのホスト鍵が保存されます。

known_hostsとの関係

ホスト鍵情報は以下のファイルへ保存されます。

~/.ssh/known_hosts

保存された情報は次回接続時に利用されます。

SSHクライアントは以下を比較します。

  • known_hostsのホスト鍵
  • サーバが提示したホスト鍵

一致すれば接続を続行します。

ホスト鍵が変更された場合

サーバ再構築などでホスト鍵が変わると警告が表示されます。

WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

これは重要な警告です。

サーバ再構築なのか、中間者攻撃なのか判断できないためです。

原因を確認してから対応する必要があります。

フィンガープリントとは

ホスト鍵にはフィンガープリントという識別情報があります。

確認方法です。
$ ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub

表示例です。
256 SHA256:xxxxxxxxxxxxx

管理者同士で確認する際に利用されます。

現在利用されるホスト鍵方式

OpenSSHでは複数の方式が利用できます。

  • RSA
  • ECDSA
  • ED25519

現在はED25519が推奨されています。

安全性と性能のバランスが優れているためです。

ホスト鍵を確認する方法

サーバ上で確認できます。

$ ls -l /etc/ssh/ssh_host*

またはフィンガープリント確認です。
$ ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub

接続トラブル時に役立ちます。

ホスト鍵を再生成する方法

ホスト鍵を作り直したい場合は以下を利用できます。

$ ssh-keygen -A

不足しているホスト鍵が自動生成されます。

再構築時やトラブル時に利用されます。

実務でホスト鍵が変わるケース

  • OS再インストール
  • サーバ再構築
  • 仮想マシン再作成
  • クラウドインスタンス再生成
  • ホスト鍵再生成

この場合はknown_hostsの更新が必要になります。

ホスト鍵変更時の対応方法

既存情報を削除します。
$ ssh-keygen -R 192.168.60.101

再接続します。
$ ssh user@192.168.60.101

新しいホスト鍵が登録されます。

クラウド環境でのホスト鍵

AWSやAzureでもホスト鍵は利用されています。

インスタンスを再作成するとホスト鍵が変わるため、known_hosts警告が発生することがあります。

これは正常な動作です。

学習環境でよく発生するトラブル

VirtualBox環境では以下がよくあります。

  • スナップショット復元
  • 仮想マシン複製
  • OS再インストール

結果としてホスト鍵が変わり、接続警告が表示されます。

SSH学習では頻繁に遭遇する現象です。

ホスト鍵管理のベストプラクティス

  • ホスト秘密鍵を外部公開しない
  • フィンガープリントを確認する
  • 警告を無視しない
  • known_hostsを適切に管理する
  • 不要なホスト鍵を削除する

特に重要サーバでは慎重な運用が必要です。

まとめ

SSHホスト鍵は接続先サーバが本物であることを確認するための重要な仕組みです。

利用者認証とは別にサーバ認証を行うことで、中間者攻撃やなりすまし攻撃を防止しています。

known_hostsやフィンガープリントとの関係を理解することで、SSHの仕組みをより深く理解できるようになります。

SSH運用では公開鍵認証だけでなく、ホスト鍵の役割についてもしっかり理解しておきましょう。