WSUS環境でOpenSSH Serverのインストールが失敗・停止する原因と対処法(ドメイン参加PC/GPO/Features on Demand)

WSUS配下のドメイン参加PCで「OpenSSH Server」を追加しようとすると、進捗が止まったまま失敗することがあります。原因は“オプション機能(Features on Demand / Capability)”がWSUSではなくWindows Update(Microsoft Update)へ取りに行く挙動になり得るためです。切り分けと、GPO設定・オフライン対策までまとめます。

目次

起きやすい症状:途中で止まる・最後に失敗する

まずは「何が起きているか」を言語化すると、調査が一気に楽になります。OpenSSH Server の追加で起きがちな症状は次のとおりです。

  • 「設定」や PowerShell で OpenSSH Server を追加すると、一定のところで進捗が動かなくなる(長時間待っても完了しない)
  • 最終的に「インストールに失敗しました」となる/再試行しても同じ
  • 環境はドメイン参加、WSUS 配下(クライアントは原則インターネットに出られない)
入口見え方よくあるキーワード/ヒント
設定アプリ(オプション機能)「インストール中」から進まない/失敗更新の取得先が内部(WSUS)で固定されている環境で発生しやすい
PowerShell(Add-WindowsCapability)エラーコードが表示されることがある0x800f0954 が代表例(WSUS 環境での FoD 取得失敗の典型)
DISM(/Add-Capability)処理が止まる/ログにエラーC:\Windows\Logs\DISM\dism.log、CBS.log を見ると原因が寄りやすい

なぜWSUSがあるのに詰まるのか:OpenSSH Server は「オプション機能」扱い

結論から言うと、ここがハマりどころです。Windows の OpenSSH Server は、多くのバージョンで「役割/機能(Server Manager の Feature)」ではなく、オプション機能(Features on Demand / Windows Capability)として提供されます。

オプション機能は、セキュリティ更新(累積更新プログラム)とは配布の仕組みが違い、必要なペイロード(CAB 等)を“どこから取るか”が別ルートになります。WSUS は「更新プログラムの配布」には強い一方、オプション機能のペイロード供給は環境によっては別途考慮が必要です。

種類代表例主な取得元(イメージ)WSUS 配下で詰まりやすいポイント
更新プログラム月例パッチ、累積更新(LCU)WSUS(社内)WSUS が正しく配布できていれば動くことが多い
オプション機能(Capability / FoD)OpenSSH Server、RSAT、言語機能などWindows Update / Microsoft Update、または管理者が用意したソース「WSUS固定+インターネット遮断」だと取得できず停止/失敗
コンポーネント修復.NET 3.5 の有効化、SFC/DISM 修復Windows Update、またはインストールメディアのソース修復コンテンツも同じポリシーの影響を受ける

つまり、「WSUS があるなら更新元は分かっているはず」という直感は更新プログラムには当てはまりますが、OpenSSH Server のようなオプション機能には当てはまらないケースがある、というのが答えです。

まずは切り分け:詰まっているのは“ネットワーク”か“ポリシー”か

いきなり対処を当てに行くより、次の2点を確認すると最短でゴールに近づきます。

  • (A)クライアントが Windows Update / Microsoft Update に到達できる設計か(物理的・ネットワーク的に外へ出られるのか)
  • (B)到達できる設計でも、ポリシーで遮断していないか(GPO で「インターネットの更新先に接続しない」等が有効になっていないか)

特に WSUS 環境では、次の遮断系ポリシーが「オプション機能の追加」にも影響して、失敗を引き起こします。

確認したいポリシー(代表例)有効だと起きることOpenSSH Server への影響
Windows Update のインターネットの場所に接続しないWindows Update への外部接続を禁止FoD を外部取得する必要がある場合に失敗しやすい
すべての Windows Update 機能へのアクセスを削除するUIや機能アクセスを抑止設定アプリからの追加がそもそもできない/挙動が不安定になりやすい
オプション コンポーネントのインストールとコンポーネント修復の設定を指定するFoD や修復コンテンツの取得先を制御ここで外部取得を許可できる(または社内ソースを指定できる)

対処法:GPO で「オプション機能は Windows Update から取得してよい」を許可する

インターネット(またはプロキシ経由)で Windows Update / Microsoft Update に到達できる設計なら、もっとも手戻りが少ないのはこの方法です。ポイントは“WSUS を使う/使わない”を更新プログラムとオプション機能で分けて考えることです。

設定するポリシー(概念)

グループポリシーで、オプションコンポーネント(FoD)と修復コンテンツの取得先に関する設定を有効化し、「WSUS ではなく Windows Update から直接ダウンロードする」を許可します。

パス(例)
コンピューターの構成 → 管理用テンプレート → システム → 「オプション コンポーネントのインストールとコンポーネント修復の設定を指定する」

ポリシー画面の文言は OS 世代や言語で微妙に違いますが、狙いは次のチェック項目です。

  • 修復コンテンツやオプション機能を、WSUS ではなく Windows Update からダウンロードすることを許可
  • (必要に応じて)代替ソースパス(Alternate source file path)を指定

実務で迷わないための手順(GPMC / gpedit)

  1. GPMC(グループポリシーの管理)で対象 OU に紐づく GPO を編集(または新規作成)
  2. 上記のポリシーを「有効」にし、外部取得を許可するチェックを入れる
  3. 同じ GPO(または別 GPO)で、遮断系ポリシーが「有効」になっていないか確認し、必要に応じて「未構成/無効」にする
  4. クライアントで gpupdate /force を実行(または再起動)
  5. OpenSSH Server の追加を再実行

「Computer Configuration(コンピューターの構成)はどこ?」という質問もよく出ますが、これはローカルグループポリシー エディター(gpedit.msc)、またはGPMC で GPO を編集したときに表示されるツリーの最上位ノードです。「コンピューターの管理」画面内の項目ではありません。

PowerShell でのインストール例(確認にも便利)

GUI が制限されている環境では、PowerShell で能力(Capability)を確認して追加すると状況が見えやすくなります。

## OpenSSH 関連の Capability を確認
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*' | Select-Object Name, State

## OpenSSH Server を追加(オンライン取得)

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

成功したら、サービス起動・自動起動・FW ルールまで一気に整えると運用が安定します。

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

## 既定の FW ルールが作成されていれば有効化

Get-NetFirewallRule -DisplayName '*OpenSSH*' | Enable-NetFirewallRule

## 22番ポート待受の確認(例)

Get-NetTCPConnection -LocalPort 22 -State Listen 

インターネットに出られない前提が強い場合:現実的な2パターン

ここが“設計の分岐点”です。GPO で外部取得を許可しても、物理的に外へ出られない(プロキシもない/FWで完全遮断)なら、当然ながらペイロードを取れずに失敗します。その場合は、次のどちらかが現実的です。

パターン何をするかメリットデメリット/注意
(A) 一時的に外部へ出すプロキシ許可や FW 例外で Windows Update への通信を許可し、インストール後に閉じる作業が早い/公式の入手経路で完結セキュリティ審査が必要になりやすい/例外範囲の設計が必要
(B) 社内にソースを用意Features on Demand(FoD)やインストールメディアを共有配置し、Source 指定で追加する完全閉域でも実現可能/変更管理しやすいOS ビルド/言語に合うメディア管理が必要/ストレージと手順整備が必要

(A) 一時的に Windows Update / Microsoft Update へ到達できる出口を用意する

「恒久的にインターネット禁止」ではなく、必要な期間だけ例外を作れるなら、現場の負担が小さいです。実務的には次のような落としどころが多いです。

  • 対象端末(または踏み台サーバー)だけ、限定期間でプロキシを通す
  • 通信先を Windows Update 系のみに絞り、一般Web閲覧はさせない
  • 導入後は例外を戻し、以降の運用は鍵配布や設定管理に集中する

ネットワーク許可範囲は組織のポリシーが最優先です。Windows Update の到達性が担保できたら、前述の GPO 設定を有効化したうえでインストールを実施します。

(B) オプション機能(FoD)のソースを社内に用意して Source 指定で追加する

閉域で確実に通すなら、この方法が“筋が良い”です。ポイントはOS のエディション/ビルド/言語に合うソースを用意すること。ズレると「ソースが見つからない」「適用できない」系のエラーになりやすいです。

やることの全体像

  1. 対象 OS に合う Features on Demand(FoD)またはインストールメディアを準備(ISO など)
  2. ファイルサーバーに共有(例:\\fileserver\sources\FOD\)
  3. クライアントから /Source を指定して OpenSSH Server を追加(必要なら /LimitAccess で外部アクセスを抑止)

DISM の例(閉域向け)

DISM /Online /Add-Capability /CapabilityName:OpenSSH.Server~~~~0.0.1.0 ^
  /Source:\\fileserver\sources\FOD\ ^
  /LimitAccess

PowerShell の例(閉域向け)

Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0 `
  -Source '\\fileserver\sources\FOD\' `
  -LimitAccess

また、GPO の「オプション コンポーネントのインストールとコンポーネント修復の設定を指定する」には、代替ソースパス(Alternate source file path)を設定できる項目があります。ここに社内共有パスを入れておけば、端末側の作業を“追加するだけ”に寄せられます。

詰まったときに見る場所:ログと代表的なエラーコード

「止まっている」ように見えるときも、裏ではリトライ待ちや取得失敗を繰り返していることがあります。原因究明はログが最短です。

  • DISM ログ:C:\Windows\Logs\DISM\dism.log
  • コンポーネントベース サービス(CBS)ログ:C:\Windows\Logs\CBS\CBS.log
  • イベントビューア:WindowsUpdateClient、Setup など(OS により差)
エラー/状況意味(よくある解釈)対処の方向性
0x800f0954WSUS 構成下で FoD の取得ができない/ブロックされているGPOで外部取得を許可、または /Source 指定(閉域)
0x800f081f / ソースが見つからない参照したメディアが合っていない/必要ファイルがないFoD/ISO のビルド・言語一致を見直す、Source パスを再確認
長時間「インストール中」で止まる外部取得のタイムアウト/リトライ待ちの可能性ネットワーク到達性、遮断系GPO、プロキシ設定を確認

実務のコツとして、まず PowerShell の Add-WindowsCapability を試すと、GUI よりもエラーコードが見えやすく、原因が「取得できないのか」「ソースが合っていないのか」を切り分けやすいです。

一時的な検証としての“WSUS無効化”はアリだが、恒久対策にはしない

検索すると「レジストリで UseWUServer を 0 にして WSUS を外し、インストール後に戻す」という回避策が出てきます。確かに切り分けには有効ですが、ドメイン環境では GPO が再適用されて戻ったり、更新運用の統制が崩れるリスクがあります。あくまで“原因切り分けの一手”として使うのが安全です。

## 例:一時的に WSUS を使わない(検証用途)
reg add "HKLM\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU" /v UseWUServer /t REG_DWORD /d 0 /f
net stop wuauserv
net start wuauserv

恒久対策は、この記事で紹介しているようにGPO で「オプション機能の取得」だけを適切に許可/制御する、または社内ソースを用意して閉域で完結させるのが王道です。

Windows Server 2016 での注意点:そもそも「標準の OpenSSH Server」が前提とズレる場合

追加情報として「Windows Server 2016 を使っている」ケースでは、もう一段注意が必要です。OpenSSH が OS 標準のオプション機能として整備されているのは、一般にWindows 10(1809以降)や Windows Server 2019/2022で扱いやすいことが多く、Server 2016(特に LTSC 1607)では状況が異なります。

  • Server 2016 では、GUI で「OpenSSH Server」が素直に出てこない、または入れ方が異なる場合がある
  • 結果として「WSUS/FoD の問題」以前に、OS 世代差(提供形態の違い)が原因になっている可能性がある

もし Server 2016 で OpenSSH を標準機能として統一したいなら、運用面では次が現実的です。

  • 可能なら Server 2019/2022 へ寄せる(標準機能として扱いやすく、GPO/FoD の設計も素直)
  • Server 2016 を継続するなら、社内配布可能な形(承認済みパッケージ、共有配置、構成管理)で導入手段を用意する

「今の端末/サーバーがどの系統か」を確認するには、次のような情報が役立ちます。

winver

## もう少し詳細に

Get-ComputerInfo | Select-Object WindowsProductName, WindowsVersion, OsBuildNumber 

運用で失敗しないための補足:導入後に確認すべきポイント

OpenSSH Server は「入ったら終わり」ではなく、運用上の最低限の確認が重要です。特にドメイン環境では、後から「接続できない」「鍵が通らない」「FWで落ちる」が起きがちです。

確認項目チェック内容コマンド例
サービスsshd が起動し、自動起動になっているGet-Service sshd
FW ルール22/TCP を許可するルールが有効Get-NetFirewallRule -DisplayName '*OpenSSH*'
待受22 番で LISTEN しているGet-NetTCPConnection -LocalPort 22 -State Listen
ログ接続失敗時に原因が残るGet-EventLog(環境により)

また、端末により「既定でパスワード認証を許可する/しない」「鍵の置き場所」「ドメインアカウントでのログオン」など運用ポリシーが変わります。導入時は “最小限の動作確認→運用基準に合わせてハードニング” の順に進めると事故が減ります。

まとめ:WSUS環境で OpenSSH Server を確実に入れるための考え方

  • OpenSSH Server は多くの環境でオプション機能(FoD / Capability)として配布され、WSUS とは別ルートで取得しようとすることがある
  • WSUS 配下でインターネット遮断が強いと、ペイロード取得に失敗してインストールが止まる/失敗する
  • 到達性が確保できるなら、GPO で「修復コンテンツやオプション機能を Windows Update から直接取得する」を許可する
  • 完全閉域なら、FoD/メディアを社内共有し、/Source 指定(+LimitAccess)で閉域完結させる
  • Windows Server 2016 は提供形態が異なる場合があるため、OS 世代差も含めて設計する

「WSUS があるのに詰まる」のは矛盾ではなく、“更新プログラム”と“オプション機能”で取得経路が違うことが原因です。ここを押さえると、OpenSSH だけでなく RSAT や .NET 3.5 などの導入トラブルも同じ考え方で整理できるようになります。

この記事を書いた人

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

コメント

コメントする

目次