【Windows】OpenSSH 公開鍵認証の設定手順 | パスワードなしでの接続

  • URLをコピーしました!
目次

はじめに

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

しかし、初期状態の「パスワード認証」のままインターネット等に公開するのは、セキュリティ上好ましくありません。パスワード認証は、機械的にパスワードを試し続ける「ブルートフォース攻撃(総当たり攻撃)」に弱いためです。

そこで今回は、より強固な 「公開鍵認証(Public Key Authentication)」 への切り替え手順を解説します。 これを導入することで、「秘密鍵を持っている端末からしか接続させない(セキュリティ向上)」 だけでなく、「ログイン時のパスワード入力が不要になる(利便性向上)」 という大きなメリットが得られます。

この記事でわかること
  • 公開鍵と秘密鍵の仕組み(鍵と錠の関係)
  • 鍵ペアの作成方法(PowerShell での ssh-keygen
  • Windows Server 側への公開鍵の正しい設置場所
    • ※特に 管理者ユーザー(Administrators) の設置場所には罠があるため要注意です。

公開鍵認証の仕組み

「公開鍵認証」という言葉は難しそうに聞こえますが、仕組みは皆さんが普段使っている「家の鍵」と非常によく似ています。 この認証方式では、「秘密鍵(Private Key)」「公開鍵(Public Key)」 というペアになる 2 つの鍵を使用します。

鍵と錠前の関係

この 2 つの鍵の役割は、以下のように例えることができます。

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

つまり、サーバーに「私の南京錠(公開鍵)」をあらかじめセットしておき、接続する時に「合鍵(秘密鍵)」を使って開錠して中に入る、というイメージです。

なぜパスワード認証より安全なのか?

パスワード認証と比較して、セキュリティが高い理由は主に 2 つあります。

「秘密」がネットワークを流れない
  • パスワード認証では、入力したパスワードそのものがネットワークを通じてサーバーへ送られます。もし通信が盗聴されていた場合、パスワードが漏洩するリスクがあります。
  • 公開鍵認証では、秘密鍵そのものは一切ネットワークを流れません。 サーバーとは「この鍵で開けられるかな?」という暗号パズルのやり取り(チャレンジ&レスポンス)を行うだけなので、鍵本体を盗まれるリスクが極めて低くなります。
総当たり攻撃(ブルートフォース)に強い
  • 人間が覚えられるパスワード(例: P@ssword123)は、攻撃者にとって推測しやすいものです。
  • 公開鍵認証で使われる鍵は、非常に長い文字列(数千ビットの暗号データ)です。これを偶然言い当てることは、現代のコンピュータでは事実上不可能です。

公開鍵の導入手順

STEP

鍵ペア(公開鍵・秘密鍵)の作成

まずは「クライアント側(操作する PC)」で、鍵ペアを作成します。 Windows 10/11 では、PowerShell で Linux と同様の ssh-keygen コマンドが使用できます。

STEP
コマンドの実行

PowerShell を起動し、以下のコマンドを入力します。

ssh-keygen -t rsa

-t rsa は「RSA 暗号方式で作る」という指定です。

STEP
作成ウィザードの進行

コマンドを実行すると、いくつか質問されますが、基本的には全て [Enter] キーを押して進めて構いません。

保存場所: Enter file in which to save the key...
  • 何も入力せず [Enter] (デフォルトの .ssh フォルダに保存されます)
パスフレーズ: Enter passphrase...
  • 秘密鍵自体にパスワードをかけたい場合は入力します。
  • 完全に自動化したい(手入力をなくしたい)場合は、何も入力せず [Enter]
確認入力: Enter same passphrase again:
  • もう一度同じものを入力(空ならそのまま [Enter]
STEP
作成されたファイルの確認

Your identification has been saved... と表示されたら作成完了です。 以下の場所に 2 つのファイルができています。

  • 場所: C:\Users\ユーザー名\.ssh\
  • ファイルの種類:
    • id_rsa【秘密鍵】 絶対に人に見せてはいけない「自分用の鍵」です。
    • id_rsa.pub【公開鍵】 これをサーバーに渡します(拡張子が .pub の方)
STEP

サーバー側への公開鍵の設置

次に、作成した「公開鍵(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 は隠しフォルダです。
このファイルを作成・編集するには、管理者権限のエディタが必要です

STEP

パスワード認証の無効化(セキュリティ強化)

無事に鍵の設置ができたら、セキュリティホールとなりうる「従来のパスワード認証」を無効化します。 これを設定すると、鍵を持っていない人は一切ログインできなくなります。

STEP
設定ファイル(sshd_config)の編集

サーバー側で、テキストエディタ(メモ帳など)を 「管理者として実行」 し、以下のファイルを開きます。

ファイル: C:\ProgramData\ssh\sshd_config

以下の項目を探し、行頭の #(コメントアウト)を外して、値を no に書き換えます。

変更前

#PasswordAuthentication yes

変更後

PasswordAuthentication no
STEP
サービスの再起動

設定を反映させるため、PowerShell(管理者)で以下のコマンドを実行してサービスを再起動します。

Restart-Service sshd
STEP

SSH 接続確認

すべての設定が完了しました。クライアント側から、パスワード入力なしで接続できるかテストしてみます。

接続コマンド

PowerShell で以下を実行します。

ssh ユーザー名@サーバーIPアドレス

成功の判定

  • 成功: パスワードを求められることなく、スッとログインできた。
  • 失敗:Permission denied (publickey). と表示された。

失敗した場合、手順 2 の「設置場所(パス)」や「ファイル名」が間違っていないか、もう一度よく確認してください。

まとめ

本記事では、Windows 版 OpenSSH Server における「公開鍵認証」の設定手順と、パスワード認証の無効化について解説しました。

  • セキュリティ向上: パスワード認証を無効化することで、ブルートフォース攻撃のリスクを遮断できます。
  • 利便性向上: ログインのたびにパスワードを入力する手間がなくなり、スムーズに操作できます。
  • Windows 特有の注意点: 管理者(Administrators)権限を持つユーザーの場合、公開鍵の設置場所が ProgramData 配下になる点に注意が必要です。

以上、最後までお読みいただきありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!

この記事を書いた人

インフラ(クラウド/NW/仮想化)から Web 開発まで、技術領域を横断して活動するエンジニア💻 コンシューマー向けエンタメ事業での新規開発・運営経験を活かし、実戦的な技術ノウハウを発信中

[ Certs ] CCIE Lifetime Emeritus / VCAP-DCA ✒️ [ Life ] 技術書・ビジネス書愛好家📖 / 小・中学校で卓球コーチ👟

目次