Windows Server OpenSSH鍵認証の2026年4月更新ポイント|管理者が確認すべき設定

Windows ServerでOpenSSHの鍵認証を使う場合、2026年4月の更新で注目すべき点は「認証方式そのものが大きく変わった」ことではなく、公開鍵を配置するPowerShell例と接続文字列が、実務で誤解しにくい形に整理されたことです。

特に管理者アカウントで鍵認証を設定する場合は、通常ユーザーとは公開鍵の配置先が異なります。標準ユーザーは C:\Users\username\.ssh\authorized_keys、管理者ユーザーは C:\ProgramData\ssh\administrators_authorized_keys を使う点を間違えると、パスワード認証は通るのに公開鍵認証だけ失敗します。

この記事では、Microsoft Learnの「Key-Based Authentication in OpenSSH for Windows」の2026年4月更新をもとに、Windows Server管理者が確認すべき変更点、設定手順、つまずきやすいポイントを実務向けに整理します。対象はWindows Server 2025、Windows Server 2022、Windows Server 2019でOpenSSH Serverを運用するIT管理者、Power User、技術選定担当者です。(GitHub)

目次

Windows ServerのOpenSSH鍵認証で2026年4月に確認すべき更新ポイント

Microsoft Learnの該当ドキュメントは、Windows環境でOpenSSHの公開鍵認証を使うための基本手順を説明しています。2026年4月のGitHub履歴では、主に次の2点が更新されています。(GitHub)

更新日更新内容実務への影響
2026年4月21日公開鍵をサーバーへ展開する例の接続文字列が ssh username@domain@hostname $remotePowershell に整理username、domain、hostname のどれを置き換えるべきか分かりやすくなった
2026年4月16日管理者向け公開鍵配置のPowerShell例で、引用符の扱いが修正administrators_authorized_keys へ公開鍵を書き込むスクリプトをコピーした際の失敗を減らせる
継続して重要Microsoft Entra IDアカウントではOpenSSH for Windowsの鍵認証はサポートされないクラウドIDだけで運用している環境では、認証設計を事前に見直す必要がある

今回の更新は、新しい暗号方式の追加やOpenSSH Serverの仕様変更ではありません。むしろ、現場でよく起きる「サンプルコマンドをそのまま貼り付けたが動かない」「管理者なのに authorized_keys に置いてしまった」といった設定ミスを減らすためのドキュメント改善と見るべきです。

Key-Based Authentication in OpenSSH for Windowsとは

Key-Based Authentication in OpenSSH for Windowsは、ユーザー名とパスワードではなく、公開鍵と秘密鍵のペアでSSHログインする認証方式です。

Windows Serverでは、従来はドメイン参加した端末同士でユーザー名・パスワード認証を使う場面が多くありました。しかし、オンプレミスとクラウド、別ドメイン、踏み台サーバー、SFTP連携などをまたぐ環境では、パスワード認証だけに頼るとブルートフォース攻撃や資格情報の使い回しが問題になりやすくなります。

公開鍵認証では、クライアント側に秘密鍵、サーバー側に公開鍵を置きます。ログイン時に秘密鍵と公開鍵の対応関係が確認され、正しい秘密鍵を持つクライアントだけが認証されます。公開鍵はサーバーに置いてもよい情報ですが、秘密鍵はパスワードと同等、またはそれ以上に慎重に管理すべき情報です。

Windows版OpenSSHでは、主に次のツールを使います。(Microsoft Learn)

ツール役割
ssh-keygen公開鍵・秘密鍵のペアを生成する
ssh-agent秘密鍵をWindowsアカウントのセキュリティコンテキスト内で保持する
ssh-add生成した秘密鍵を ssh-agent に登録する
scp / sftp初回設定時の公開鍵転送やファイル転送に使う

今回の更新で特に見直したい接続文字列の考え方

2026年4月21日の更新では、公開鍵をリモートサーバーへ展開するサンプルの接続先表記が、より一般化された形に変更されています。以前の例では具体的なドメイン風の文字列が使われており、ユーザー名、ドメイン名、ホスト名のどこを置き換えるのか分かりにくいケースがありました。(GitHub)

更新後の例では、次のように示されています。

ssh username@domain@hostname $remotePowershell

これは、UPN形式のユーザー名を使う場合に @ が2つ見える形になるため、初見では少し分かりにくいかもしれません。読み解くポイントは、最後の @hostname がSSH接続先のホストで、その前がログインユーザーを表す部分だという点です。

たとえば、環境によっては次のような使い分けになります。

アカウント種別接続例補足
ローカルユーザーssh localuser@server01最も単純な形式
ドメインユーザーssh domain\user@server01Windowsのドメインユーザー表記に近い
UPN形式のユーザーssh [email protected]@server01ユーザー名部分に @ が含まれる

実務では、公開鍵を配置する前に、まずパスワード認証で対象ユーザーのSSHログイン表記が正しいか確認してください。ログイン名の表記が間違っていると、公開鍵の配置やACLが正しくても「鍵認証が失敗した」と誤解しやすくなります。

管理者アカウントと標準ユーザーで公開鍵の配置先が違う

Windows ServerのOpenSSH鍵認証で最も失敗しやすいのが、公開鍵ファイルの配置先です。

Linuxでは多くの場合、ユーザーごとのホームディレクトリにある ~/.ssh/authorized_keys を見れば済みます。しかしWindows版OpenSSHでは、対象ユーザーがローカルAdministratorsグループに属しているかどうかで参照されるファイルが変わります。

対象ユーザー公開鍵の配置先注意点
標準ユーザーC:\Users\username\.ssh\authorized_keysユーザープロファイル配下に配置
管理者ユーザーC:\ProgramData\ssh\administrators_authorized_keysユーザー別の authorized_keys ではなく、管理者用ファイルを使う
Microsoft Entra IDアカウント非対応ローカルWindowsアカウントまたはActive Directoryアカウントで設計する

管理者アカウントでログインするのに C:\Users\username\.ssh\authorized_keys へ公開鍵を置いても、期待どおりに認証されない場合があります。管理者ユーザーでは C:\ProgramData\ssh\administrators_authorized_keys を使う、という切り分けを最初に確認してください。

標準ユーザーで公開鍵認証を設定する手順

標準ユーザーであれば、公開鍵はユーザープロファイル配下の .ssh\authorized_keys に配置します。

まず、クライアント側で鍵ペアを生成します。Microsoft Learnの例ではECDSAを使っています。社内ポリシーで指定がない場合は、環境の標準に合わせてEd25519やECDSAを選びます。なお、アルゴリズムを指定しない場合、現在のドキュメントではEd25519が使われると説明されています。(Microsoft Learn)

ssh-keygen -t ecdsa

生成後、秘密鍵と公開鍵は通常、次のように保存されます。

C:\Users\username\.ssh\id_ecdsa
C:\Users\username\.ssh\id_ecdsa.pub

拡張子のない id_ecdsa が秘密鍵、.pub が付いた id_ecdsa.pub が公開鍵です。サーバーへ置くのは公開鍵だけです。秘密鍵をサーバーへコピーしてはいけません。

標準ユーザーの公開鍵配置例は次の流れです。

$authorizedKey = Get-Content -Path $env:USERPROFILE\.ssh\id_ecdsa.pub

$remotePowershell = "powershell New-Item -Force -ItemType Directory -Path $env:USERPROFILE\.ssh; Add-Content -Force -Path $env:USERPROFILE\.ssh\authorized_keys -Value '$authorizedKey'"

ssh username@domain@hostname $remotePowershell

実行時は、username@domain@hostname を自分の環境に合わせて置き換えます。ローカルユーザーであれば username@hostname のように簡略化できる場合があります。

管理者ユーザーで公開鍵認証を設定する手順

管理者ユーザーの場合、公開鍵は C:\ProgramData\ssh\administrators_authorized_keys に配置します。このファイルは管理者アカウント用であり、ユーザープロファイル配下の authorized_keys の代わりに使われます。(Microsoft Learn)

2026年4月16日の更新では、この管理者向けPowerShell例の引用符の扱いが修正されています。コピーして使う場合は、古い記事や社内手順書に残っている三重引用符の例をそのまま流用しないよう注意してください。(GitHub)

管理者ユーザー向けの基本例は次のとおりです。

$authorizedKey = Get-Content -Path $env:USERPROFILE\.ssh\id_ecdsa.pub

$remotePowershell = "powershell Add-Content -Force -Path $env:ProgramData\ssh\administrators_authorized_keys -Value '$authorizedKey';icacls.exe ""$env:ProgramData\ssh\administrators_authorized_keys"" /inheritance:r /grant ""Administrators:F"" /grant ""SYSTEM:F"""

ssh username@domain@hostname $remotePowershell

重要なのは、公開鍵を置くだけでなくACLを適切に設定することです。administrators_authorized_keys は、基本的にAdministratorsとSYSTEMだけがアクセスできる状態にする必要があります。

日本語版Windows Serverなど、英語以外のローカライズ環境では、グループ名の扱いで失敗することがあります。その場合は、グループ名ではなくSIDを使う方が安全です。

AdministratorsグループのSIDを使う例は次のとおりです。

$remotePowershell = "powershell Add-Content -Force -Path $env:ProgramData\ssh\administrators_authorized_keys -Value '$authorizedKey';icacls.exe ""$env:ProgramData\ssh\administrators_authorized_keys"" /inheritance:r /grant ""*S-1-5-32-544:F"" /grant ""SYSTEM:F"""

*S-1-5-32-544 は組み込みAdministratorsグループを指すSIDです。ローカライズされたグループ名でスクリプトが失敗する場合は、このSID形式を検討してください。

ssh-agentを使う理由と注意点

秘密鍵はパスワードと同じ扱いで保護する必要があります。Windowsでは ssh-agent を使うことで、秘密鍵をWindowsアカウントに関連付いたセキュリティコンテキスト内に保持できます。(Microsoft Learn)

ssh-agent を自動起動し、秘密鍵を登録する例は次のとおりです。

Get-Service ssh-agent | Set-Service -StartupType Automatic
Start-Service ssh-agent
Get-Service ssh-agent

ssh-add $env:USERPROFILE\.ssh\id_ecdsa

ssh-agent に鍵を登録すると、SSHクライアントは必要に応じて秘密鍵を利用できます。毎回秘密鍵ファイルのパスを指定する手間を減らせるため、管理端末から複数のWindows Serverへ接続する運用では便利です。

ただし、Microsoft Learnでは、秘密鍵を安全な場所へバックアップしたうえで、ssh-agent へ追加後にローカルシステム上の秘密鍵を削除することも推奨しています。秘密鍵を失うと、エージェントから取り出せない場合があり、接続先すべてで公開鍵を更新する必要があります。(Microsoft Learn)

実務では、次の3点を運用ルールに入れてください。

項目推奨対応
秘密鍵の保管暗号化された安全な場所にバックアップする
パスフレーズ空にせず、端末紛失時のリスクを下げる
鍵の棚卸し退職者、異動者、廃止端末の公開鍵を定期的に削除する

Microsoft Entra IDアカウントでは鍵認証できない点に注意

現在のMicrosoft Learnでは、OpenSSH for Windowsのキーベース認証はローカルWindowsアカウントとActive Directoryドメインアカウントで機能し、Microsoft Entra IDアカウントではサポートされないと明記されています。(Microsoft Learn)

これは、クラウドID中心の環境では見落としやすいポイントです。

たとえば、次のような構成では事前確認が必要です。

構成注意点
Entra ID参加のみの管理端末からWindows ServerへSSHサーバー側のログインアカウントとしてEntra IDをそのまま使えない
Azure上のWindows ServerをOpenSSHで管理ローカル管理者、ADドメインアカウント、別の認証経路を設計する
ID管理をEntra IDに一本化したいOpenSSH鍵認証だけで要件を満たせるか確認が必要

「クラウドIDでWindowsへサインインできるから、OpenSSHの公開鍵認証でも同じアカウントを使える」と考えると設計ミスになります。Windows ServerのSSH運用では、どのアカウント体系でログインさせるのかを先に決めてください。

AuthorizedKeysCommandはWindows OpenSSHで使えない

LinuxのOpenSSH運用に慣れている管理者は、AuthorizedKeysCommand を使ってLDAPやディレクトリサービスから公開鍵を動的に取得する構成を想定することがあります。

しかし、Windows OpenSSHでは AuthorizedKeysCommand と AuthorizedKeysCommandUser はサポートされていません。Microsoft LearnのOpenSSH Server構成ページでも、Windows版OpenSSHに含まれるバージョンでは利用できない構成引数として挙げられています。(Microsoft Learn)

つまり、Windows Serverで公開鍵を集中管理したい場合は、次のような別の運用を考える必要があります。

やりたいこと現実的な対応
ユーザーごとの公開鍵を集中配布したいPowerShell、構成管理ツール、GPO、運用スクリプトでファイル配布する
ADから動的に公開鍵を取得したいWindows OpenSSH標準の AuthorizedKeysCommand では実現できない
管理者の公開鍵を統制したいadministrators_authorized_keys を管理対象ファイルとして扱う
鍵の失効を即時反映したい公開鍵ファイルの更新と sshd の挙動確認を運用手順に入れる

Linuxと同じ設計をそのままWindows Serverに移植するのではなく、Windows版OpenSSHでサポートされる構成を前提に設計することが重要です。

鍵認証セッションではアウトバウンド認証に注意

Microsoft Learnでは、鍵認証で開いたリモートセッションには関連付けられたユーザー資格情報がなく、そのセッションからユーザーとしてアウトバウンド認証できないと説明されています。これは仕様です。(Microsoft Learn)

この点は、管理作業の自動化で特に重要です。

たとえば、SSHでWindows Serverへログインしたあとに次の操作を行う場合、想定どおりに動かないことがあります。

  • 別サーバーの共有フォルダーへアクセスする
  • ドメイン上の別リソースへユーザー資格情報で接続する
  • SQL Serverや管理サーバーへ現在のユーザーとして接続する
  • リモート先からさらに別のWindows Serverへ操作を中継する

これは、いわゆる「二段目の認証」で問題になりやすい部分です。鍵認証は初回ログインには有効ですが、その先のリソースアクセスまで自動的に保証するものではありません。

運用設計では、次のように切り分けて考えると安全です。

用途鍵認証との相性
サーバーへの初回SSHログイン相性が良い
SFTP/SCPによるファイル配置相性が良い
ローカルサービスの再起動相性が良い
別サーバーへのドメイン資格情報アクセス追加設計が必要
多段SSHや横展開の管理作業認証方式と権限委任の確認が必要

Windows ServerでOpenSSH鍵認証を導入する実務手順

ここからは、実際に導入するときの流れを整理します。

OpenSSH Serverが導入済みか確認する

Windows Server 2025ではOpenSSHが既定でインストールされると説明されていますが、sshd サービスが有効化されているかは別途確認が必要です。Windows Server 2019や2022では、環境によってOpenSSH Serverの追加が必要です。(Microsoft Learn)

管理者権限のPowerShellで確認します。

Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'

未導入の場合は、OpenSSH Serverを追加します。

Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

サービスを起動し、自動起動に設定します。

Start-Service sshd
Set-Service -Name sshd -StartupType Automatic

ファイアウォールルールも確認します。

Get-NetFirewallRule -Name "OpenSSH-Server-In-TCP" -ErrorAction SilentlyContinue

ルールがない場合は、TCP 22番を許可する必要があります。OpenSSH Serverのインストール時に自動作成されることがありますが、セキュリティポリシーやイメージ作成手順によっては無効化されている場合があります。

先にパスワード認証で接続できるか確認する

公開鍵を配置する前に、対象ユーザーでSSHログインできるか確認します。

ssh username@hostname

ドメインユーザーの場合は、環境に応じて次のような形式を試します。

ssh domain\username@hostname

またはUPN形式を使います。

ssh [email protected]@hostname

ここで接続できない場合、公開鍵認証以前の問題です。DNS、ファイアウォール、sshd サービス、ユーザー権限、OpenSSH Usersグループ、アカウント表記を確認してください。

公開鍵を配置する

対象ユーザーが標準ユーザーか管理者かを確認し、配置先を選びます。

標準ユーザーなら次のファイルです。

C:\Users\username\.ssh\authorized_keys

管理者ユーザーなら次のファイルです。

C:\ProgramData\ssh\administrators_authorized_keys

この判断を間違えると、公開鍵の内容が正しくても認証に失敗します。特に、日常的に管理者権限で作業しているアカウントは administrators_authorized_keys 側を確認してください。

鍵認証で接続テストする

秘密鍵を明示して接続する場合は、次のように指定できます。

ssh -i $env:USERPROFILE\.ssh\id_ecdsa username@hostname

詳細ログを見たい場合は、-v を付けます。原因調査では -vvv まで上げることもあります。

ssh -vvv -i $env:USERPROFILE\.ssh\id_ecdsa username@hostname

接続できたら、必要に応じて ssh-agent に秘密鍵を登録します。

ssh-add $env:USERPROFILE\.ssh\id_ecdsa

よくある失敗と切り分け方法

Windows ServerのOpenSSH鍵認証では、エラー原因が「鍵そのもの」ではないことがよくあります。次の表で切り分けると、無駄な再設定を減らせます。

症状よくある原因確認ポイント
パスワード認証は通るが鍵認証が通らない公開鍵の配置先が違う標準ユーザーか管理者ユーザーか確認
管理者アカウントだけ鍵認証に失敗するauthorized_keys に置いているC:\ProgramData\ssh\administrators_authorized_keys を使う
administrators_authorized_keys を作ったが失敗するACLが広すぎる、または不正AdministratorsとSYSTEMの権限を確認
日本語版WindowsでACL設定が失敗するグループ名のローカライズ*S-1-5-32-544 のSID指定を使う
サンプルコマンドを貼ったが接続できないusername@domain@hostname の置換ミスログイン名とホスト名を分けて確認
Entra IDユーザーでログインできない鍵認証がサポート対象外ローカルアカウントまたはADアカウントで再設計
SSHログイン後に別サーバーへアクセスできない鍵認証セッションにユーザー資格情報がない二段目の認証方式を別途設計
sshd_config を変えても反映されないサービス再起動をしていないRestart-Service sshd を実行

sshd_config の変更は、サービス再起動後に反映されます。設定を変えたのに挙動が変わらない場合は、まず sshd の再起動を確認してください。(Microsoft Learn)

Restart-Service sshd

セキュリティを高めるための運用チェックリスト

鍵認証を導入しても、秘密鍵の管理が甘ければ安全とは言えません。Windows ServerでOpenSSHを継続運用するなら、次の項目をチェックしてください。

チェック項目判断基準
秘密鍵にパスフレーズを設定しているか管理端末の紛失やマルウェア感染時の被害を抑えられる
秘密鍵を共有していないか個人ごとに鍵を発行し、共有鍵を避ける
退職・異動時に公開鍵を削除しているかauthorized_keys と administrators_authorized_keys を棚卸しする
管理者用公開鍵ファイルのACLが適切かSYSTEMとAdministrators以外に不要な権限がない
パスワード認証を残す理由が明確か鍵認証移行後、不要なら無効化を検討する
緊急時の代替ログイン経路があるかRDP、コンソール、Break Glassアカウントを用意する
ログを確認できるかトラブル時に認証失敗の原因を追える状態にする

パスワード認証を無効化する場合は、必ず別セッションで鍵認証の成功を確認してから実施してください。いきなり無効化すると、設定ミスで自分自身を締め出す可能性があります。

2026年4月更新を受けて社内手順書で直すべき箇所

今回の更新は、社内Wikiや運用手順書に反映する価値があります。特に、過去にMicrosoft Learnの古いサンプルをコピーして作った手順がある場合は、次の項目を見直してください。

見直し対象修正ポイント
公開鍵展開コマンド接続文字列を username@domain@hostname の考え方で説明する
管理者向けPowerShell例古い三重引用符の例が残っていないか確認する
管理者ユーザーの配置先administrators_authorized_keys を明記する
標準ユーザーの配置先authorized_keys のファイル名を正確に書く
日本語版Windows向け手順Administratorsグループ名ではなくSID例も併記する
Entra ID環境向け注意Entra IDアカウントは鍵認証非対応と明記する
トラブルシュート「配置先」「ACL」「接続文字列」を最初に確認する流れにする

特に重要なのは、管理者アカウントの扱いです。Windows Serverでは管理者権限でSSH接続するケースが多いため、authorized_keys ではなく administrators_authorized_keys を使うことを手順の最初に書いておくと、問い合わせや切り分け時間を減らせます。

Windows ServerのOpenSSH鍵認証は「設定」より「運用設計」が重要

Key-Based Authentication in OpenSSH for Windowsは、Windows Serverのリモート管理やSFTP連携を安全にするうえで有効な選択肢です。ただし、Linuxと同じ感覚で設定すると、管理者ユーザーの公開鍵配置先、ACL、Entra ID非対応、アウトバウンド認証の制約でつまずきます。

2026年4月の更新では、接続文字列とPowerShell例がより実務向けに整理されました。まずは自社の手順書で、次の3点を確認してください。

  • 管理者ユーザーは C:\ProgramData\ssh\administrators_authorized_keys を使う
  • 公開鍵展開コマンドの username、domain、hostname の置き換え方を明記する
  • Entra IDアカウントではOpenSSH for Windowsの鍵認証が使えないことを設計段階で確認する

既存のWindows ServerでOpenSSHを使っている場合は、まずテスト用ユーザーで鍵認証を再確認し、その後に管理者アカウント、ACL、秘密鍵管理、パスワード認証の扱いを順番に見直すのが安全です。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次