はじめに
前回の記事では、Windows 10/11 に OpenSSH Server をインストールし、外部から接続できるようにする手順を紹介しました。

しかし、初期状態の「パスワード認証」のままインターネット等に公開するのは、セキュリティ上好ましくありません。パスワード認証は、機械的にパスワードを試し続ける「ブルートフォース攻撃(総当たり攻撃)」に弱いためです。
そこで今回は、より強固な 「公開鍵認証(Public Key Authentication)」 への切り替え手順を解説します。 これを導入することで、「秘密鍵を持っている端末からしか接続させない(セキュリティ向上)」 だけでなく、「ログイン時のパスワード入力が不要になる(利便性向上)」 という大きなメリットが得られます。
- 公開鍵と秘密鍵の仕組み(鍵と錠の関係)
- 鍵ペアの作成方法(PowerShell での
ssh-keygen) - Windows Server 側への公開鍵の正しい設置場所
- ※特に 管理者ユーザー(Administrators) の設置場所には罠があるため要注意です。
公開鍵認証の仕組み
「公開鍵認証」という言葉は難しそうに聞こえますが、仕組みは皆さんが普段使っている「家の鍵」と非常によく似ています。 この認証方式では、「秘密鍵(Private Key)」 と 「公開鍵(Public Key)」 というペアになる 2 つの鍵を使用します。

鍵と錠前の関係
この 2 つの鍵の役割は、以下のように例えることができます。
- 秘密鍵 = 「物理的な鍵」
-
- 持っている人: クライアント(あなた)
- 役割: 誰にも渡さず、自分だけで厳重に管理します。これがないと扉を開けられません。
- 公開鍵 = 「南京錠(錠前)」
-
- 置く場所: サーバー(接続先)
- 役割: サーバー側の扉に取り付けます。この錠前は、対になる「秘密鍵」でしか開けることができません。

つまり、サーバーに「私の南京錠(公開鍵)」をあらかじめセットしておき、接続する時に「合鍵(秘密鍵)」を使って開錠して中に入る、というイメージです。
なぜパスワード認証より安全なのか?
パスワード認証と比較して、セキュリティが高い理由は主に 2 つあります。
- 「秘密」がネットワークを流れない
-
- パスワード認証では、入力したパスワードそのものがネットワークを通じてサーバーへ送られます。もし通信が盗聴されていた場合、パスワードが漏洩するリスクがあります。
- 公開鍵認証では、秘密鍵そのものは一切ネットワークを流れません。 サーバーとは「この鍵で開けられるかな?」という暗号パズルのやり取り(チャレンジ&レスポンス)を行うだけなので、鍵本体を盗まれるリスクが極めて低くなります。
- 総当たり攻撃(ブルートフォース)に強い
-
- 人間が覚えられるパスワード(例:
P@ssword123)は、攻撃者にとって推測しやすいものです。 - 公開鍵認証で使われる鍵は、非常に長い文字列(数千ビットの暗号データ)です。これを偶然言い当てることは、現代のコンピュータでは事実上不可能です。
- 人間が覚えられるパスワード(例:
公開鍵の導入手順
鍵ペア(公開鍵・秘密鍵)の作成
まずは「クライアント側(操作する PC)」で、鍵ペアを作成します。 Windows 10/11 では、PowerShell で Linux と同様の ssh-keygen コマンドが使用できます。
PowerShell を起動し、以下のコマンドを入力します。
ssh-keygen -t rsa※ -t rsa は「RSA 暗号方式で作る」という指定です。
コマンドを実行すると、いくつか質問されますが、基本的には全て [Enter] キーを押して進めて構いません。
- 保存場所:
Enter file in which to save the key... -
- 何も入力せず [Enter] (デフォルトの
.sshフォルダに保存されます)
- 何も入力せず [Enter] (デフォルトの
- パスフレーズ:
Enter passphrase... -
- 秘密鍵自体にパスワードをかけたい場合は入力します。
- 完全に自動化したい(手入力をなくしたい)場合は、何も入力せず [Enter]
- 確認入力:
Enter same passphrase again: -
- もう一度同じものを入力(空ならそのまま [Enter])
Your identification has been saved... と表示されたら作成完了です。 以下の場所に 2 つのファイルができています。
- 場所:
C:\Users\ユーザー名\.ssh\ - ファイルの種類:
id_rsa: 【秘密鍵】 絶対に人に見せてはいけない「自分用の鍵」です。id_rsa.pub: 【公開鍵】 これをサーバーに渡します(拡張子が.pubの方)
サーバー側への公開鍵の設置
次に、作成した「公開鍵(id_rsa.pub)」の中身を、サーバー側の許可リストファイルに登録します。 ここが最大の注意点です。 Windows 版 OpenSSH Server では、「ログインするユーザーが管理者かどうか」 で、公開鍵を置くべき場所が全く異なります。
まず、クライアント側で id_rsa.pub をメモ帳などで開き、中の文字列(ssh-rsa AAAA... から始まる長い文字列)をすべてコピーしてください。
その上で、サーバー側の以下のファイルに貼り付け(追記)て保存します。 ※ファイルが存在しない場合は、メモ帳などで新規作成してください(拡張子は無し、または .txt を削除)
A. 一般ユーザーでログインする場合
Linux と同じ標準的な場所に配置します。
- 配置パス:
C:\Users\ユーザー名\.ssh\authorized_keys - 注意: ファイル名は
authorized_keysです(複数形sを忘れずに)
B. 管理者ユーザー(Administrators)の場合
ここが Windows 特有の仕様です。ユーザーフォルダではなく、システム全体のプログラムデータフォルダを使用します。
- 配置パス:
C:\ProgramData\ssh\administrators_authorized_keys - 注意: ファイル名は
administrators_authorized_keysです(authorized_keysではありません)



ProgramData は隠しフォルダです。
このファイルを作成・編集するには、管理者権限のエディタが必要です
パスワード認証の無効化(セキュリティ強化)
無事に鍵の設置ができたら、セキュリティホールとなりうる「従来のパスワード認証」を無効化します。 これを設定すると、鍵を持っていない人は一切ログインできなくなります。
サーバー側で、テキストエディタ(メモ帳など)を 「管理者として実行」 し、以下のファイルを開きます。
ファイル: C:\ProgramData\ssh\sshd_config
以下の項目を探し、行頭の #(コメントアウト)を外して、値を no に書き換えます。
変更前
#PasswordAuthentication yes変更後
PasswordAuthentication no設定を反映させるため、PowerShell(管理者)で以下のコマンドを実行してサービスを再起動します。
Restart-Service sshdSSH 接続確認
すべての設定が完了しました。クライアント側から、パスワード入力なしで接続できるかテストしてみます。
接続コマンド
PowerShell で以下を実行します。
ssh ユーザー名@サーバーIPアドレス成功の判定
- 成功: パスワードを求められることなく、スッとログインできた。
- 失敗:
Permission denied (publickey).と表示された。



失敗した場合、手順 2 の「設置場所(パス)」や「ファイル名」が間違っていないか、もう一度よく確認してください。
まとめ
本記事では、Windows 版 OpenSSH Server における「公開鍵認証」の設定手順と、パスワード認証の無効化について解説しました。
- セキュリティ向上: パスワード認証を無効化することで、ブルートフォース攻撃のリスクを遮断できます。
- 利便性向上: ログインのたびにパスワードを入力する手間がなくなり、スムーズに操作できます。
- Windows 特有の注意点: 管理者(Administrators)権限を持つユーザーの場合、公開鍵の設置場所が
ProgramData配下になる点に注意が必要です。
以上、最後までお読みいただきありがとうございました。


