SSHホスト鍵の管理

SSHの認証プロセスでは、アクセスユーザーの認証の前に接続ホストを認証しています。
~/.ssh/known_hostsに接続済ホストの鍵がリストされており、接続時に一致しないとエラーになります。

よって接続ホストの構成を変更した場合など、known_hostsを変更すべき場合があります。
基本的には、既存のエントリを削除のうえ、新しい鍵を登録します。

ホスト確認しない接続設定もありますが、中間者攻撃などを発見できなくなるため避けるべきでしょう。

known_hostsエントリの削除

古いエントリを削除するには、ssh-keygen -Rコマンドを用います。
known_hostsにホスト名が記載されているケースでは手動編集しても問題ありませんが、ハッシュ化されている場合、どの行が該当のホストなのか区別するためにコマンド実行が必要です。

$ ssh-keygen -R host.example.com

# ポート指定する場合
$ ssh-keygen -R [host.example.com]:1000

# ファイル指定する場合
$ ssh-keygen -R host.example.com -f /path/to/known_hosts

上の例のとおり、単純なホスト名のみのケース(22番ポートにアクセス)ではとくに問題ありませんが、ポート指定する場合の書式が独特であるため、注意が必要です。

known_hostsエントリの追加

known_hostsに記載できるホスト鍵を取得するには、ssh-keyscanを用います。
なお、攻撃などによりssh-keyscan実行時点で接続先がすり替えられていると防衛の意味がないため、接続ホストが適切であることの保証が必要です。

$ ssh-keyscan host.example.com

# ポート指定する場合
$ ssh-keyscan -p 1000 host.example.com

# ハッシュ化する場合
$ ssh-keyscan -H host.example.com

# リダイレクトで追記
$ ssh-keyscan host.example.com >> /path/to/known_hosts

単純な構成の場合は疑問の余地は少ないのですが、ポート指定はssh-keygenと異なります。
また、known_hostsがハッシュ化されているケースでは-Hオプションが必要です。

⁋ 2021/12/16↻ 2024/12/18
中馬崇尋
Chuma Takahiro