FIG-100

SSH — 秘密鍵は見せずに、署名だけを見せる

セキュリティ 2026.09.24 公開 読了 約12分

SSH は、遠くのサーバーに安全にログインして操作するための仕組みです。パスワードでも入れますが、現場では公開鍵認証が主流です。理由は1つ。一番大事な秘密(秘密鍵)を、一度も回線に流さずにログインできるからです。

図1でログインの手順を1つずつ進めてください。回線を流れるものを追っていくと、秘密鍵が最後まで手元から動かないことが分かります。「偽のサーバー」に切り替えると、SSHがサーバー側の本人確認もしていることも見えてきます。

SSH 公開鍵認証 — 秘密鍵は手元から出さず、署名だけを見せる
💻 手元のPC
🔑 秘密鍵id_ed25519 — 外に出さない
📒 known_hosts前に会ったサーバーの身分証
✍️ 署名を作る秘密鍵でデータに印を押す
インターネット(誰でも覗ける)
← ホスト鍵(サーバーの身分証)
⇄ 鍵交換 — 2人だけの暗号鍵を決める
→ 「hanako として、この公開鍵で入りたい」
← 「ではこのデータに署名して」
→ 署名(秘密鍵そのものではない)
← 「確認できた。どうぞ」
WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! 身分証が前回と違う。接続を中止しました
🖥️ サーバー
🔓 authorized_keyshanako の公開鍵を登録済み
🪪 ホスト鍵このサーバーの身分証
✅ 署名を検証公開鍵で確かめる
$ ssh hanako@server.example hanako@server:~$
回線に出た秘密鍵 0 回
回線の状態 平文
図1 — 見せるのは「秘密鍵で押した印」だけ。印は毎回違うデータに押すので、盗んでも使い回せない

鍵は2本1組。閉じる鍵と、確かめる鍵

最初に ssh-keygen で秘密鍵と公開鍵のペアを作ります。公開鍵はサーバーに渡し(authorized_keys に登録)、秘密鍵は自分のPCにしまっておく。公開鍵は名前の通り、誰に見られても構いません。

ログインのとき、サーバーは「この公開鍵と対になる秘密鍵を持っているなら、それを証明して」と言います。クライアントは秘密鍵で署名を作って返し、サーバーは公開鍵でその署名が本物かを確かめる。秘密鍵を持っていなければ作れない印を見せることで、秘密鍵そのものを見せずに証明するのです。

サーバーの本人確認も、SSHの仕事

初めて接続するとき、「このサーバーの指紋は〇〇です。接続しますか?」と聞かれた経験があるかもしれません。これはサーバーのホスト鍵(身分証)を known_hosts に覚えておくための確認です。

2回目以降は、覚えた身分証と照らし合わせます。図1で「偽のサーバー」にすると、身分証が一致しないので接続を止めます。途中で誰かが本物になりすましても、ログインの手前で気づけるわけです。この警告が出たら、「はい」で進めず理由を確かめるのが鉄則です。

ポートフォワーディング — SSHの通路に相乗りする

一度SSHの暗号化された通路ができると、ほかの通信をその中に通すこともできます。これがポートフォワーディングです。外から直接触れないデータベースに、SSHで入れるサーバーを踏み台にして安全につなぐ、といった使い方が定番です。図2で比べてみてください。

ポートフォワーディング — 閉じた扉の向こうへ、SSHのトンネルで届ける
$ psql -h db.internal -p 5432
💻 手元のPC localhost:15432
防火壁
22番だけ開いている
🖥️ 踏み台サーバー bastion:22
🗄️ データベース db.internal:5432
DIRECT
図2 — 防火壁から見えるのは22番のSSHだけ。DBへの通信は、その中に包まれて通り抜ける
用語ミニ辞書
SSH
遠くのサーバーに暗号化された通路でログインし、操作するための仕組み。
公開鍵認証
秘密鍵で作った署名を、登録済みの公開鍵で確かめてログインを許す方式。
authorized_keys
サーバー側に置く、ログインを許す公開鍵の一覧。
known_hosts
クライアント側に置く、過去に接続したサーバーのホスト鍵の記録。
ホスト鍵
サーバー自身の鍵。なりすましを見抜くための身分証になる。
ポートフォワーディング
SSHの通路の中に別の通信を通し、離れた場所のポートへ届けること。

まとめ

SSHの公開鍵認証は、秘密鍵を見せる代わりに、秘密鍵でしか作れない署名を見せる方式です。署名は毎回違うデータに対して作るので、盗み見ても使い回せません。同時にSSHはサーバーの身分証も確かめ、なりすましを入口で止めます。そうしてできた安全な通路には、ほかの通信を相乗りさせることもできるのです。