かつて山市良と呼ばれたおじさんのブログ

セイテクエンジニアのブログ  かつて山市良と呼ばれたおじさんのブログ  メモ. Process Monitorを用いたWindows Server 2025のバグ調査報告

 

 

メモ. Process Monitorを用いたWindows Server 2025のバグ調査報告

2024年11月08日配信
2024年11月08日更新
執筆者:山内 和朗

 2024年11月1日(米国時間)、「Windows Server 2025」がリリースされました。2024年5月にパブリックプレビューがリリースされてから、大きな動きはありませんでしたが、その間にプレビュー版の試用で遭遇した、日本語版固有のバグについて、どのように問題の原因を調査したのか、他の問題のトラブルシューティングにも役立つテクニックだと思うのでここに記録しておきます。この問題はWindows Server 2025 Preview(OSビルド26100.1~2033)で確認し、Microsoftにフィードバックしたものですが、正式リリースとなった製品ではどうなったかというと、OSビルド26100.2033(GAビルドは26100.1742)時点ではまだ解消されていません。

 

「サーバーマネージャー」の「リモートSSHアクセス」が機能しない!?


 Windowsのオリジナルの言語は「英語(米国)」(en-us)であり、各国語版はそのベースに言語パックを追加して表示/入力言語をローカライズして提供されます。Windowsの新しいバージョン、特に新たに追加された機能については、ローカライズ版固有の問題が発生することがよくあります。今回紹介するのは「Windows Server 2025 Preview」の日本語版確認した日本語版固有のバグについてです(注: 製品版ではありませんが、製品版でも同じ問題を確認しました)。他の言語にも影響するかもしれませんが、日本語版(ja-jp)以外のローカライズ版については調査していません。


 問題とはWindows Server 2025のopenSSHサーバー周りの新機能(→Microsoft Learn)に関する部分に存在しました。openSSH ServerはWindows Server 2019のときにオプションの機能として標準搭載されましたが、これまではオプションの機能を手動で追加し、さらにサービスのスタートアップの種類を手動で変更する必要がありました。Windows Server 2025では、オプションの機能であるopenSSH Server(openSSH.Server~~~~0.0.1.0)が既定でインストールされるようになりました。また、「サーバーマネージャー」の「ローカルサーバー」に「リモートSSHアクセス(Remote SSH Access)」の項目が追加され、有効/無効をワンクリックで切り替えることができるようになっています。

 

 しかし、Windows Server 2025 Preview日本語版では、この「リモートSSHアクセス」の「無効」リンクをクリックしても、黒い画面が出現し、エラーと思われる文字が一瞬見えたかと思ったら、その後、何も起きません。「リモートSSHアクセス」は「無効」のままです(画面1)。

 

画面1
画面1 Windows Server 2025 Preview日本語版では「リモートSSHアクセス」の「無効」のリンクをクリックしても、一瞬黒い画面が表示されるが何も変わらない

 Windows Server 2025 Preview英語版で同じように「Remote SSH Access」の「Disabled」リンクをクリックすると、「SSH remote access This will enable applications ...」というメッセージが表示され、「Yes」と答えると、有効(Enabled)になります。このメッセージが表示されている間に「タスクマネージャー」を起動して、プロセスを確認してみると、「powershell.exe」のプロセスのコマンドラインに実行されているスクリプトブロックの存在を確認することができます。ただし、コマンドラインが長すぎてすべてを確認することができません(画面2)。

 

画面2
画面2 Windows Server 2025 Preview英語版では、「Remote SSH Access」の切り替えが問題なく機能する

 そこで、Windows Sysinternalsの「Process Monitor(Procmon.exe)」ユーティリティ(→Streams| Sysinternals|Microsoft Learn)を使用して、「powershell.exe」のプロセスがしている詳細を確認することにしました。

 

booksysintfromnbp お勧めの一冊

 Windows Sysinternals 徹底解説 改訂新版(2017年 日経BP)
 Mark E. Russinovich、Aaron Margosis 著、山内和朗 訳)

 ※書籍の正誤情報、およびユーティリティのこれまでの更新情報については、旧ブログサイトをご覧ください。

 

Procmon.exeの使いこなしテク

 

 Procmon.exeを開始して、「Remote SSH Access」の「Disabled」リンクをクリックし、メッセージが表示されたところでキャプチャを停止します。その後、プロセス名が「powershell.exe」であるイベントのフィルター([Process Name][is][powershell.exe]then[Include])を追加し、「powershell.exe」のイベントだけに絞り込みます(画面3)。

 

画面3
画面3 [Process Name][is][powershell.exe]then[Include]というフィルターを追加する

 絞り込んだイベントのリストから、Procmon.exeの「検索(Find)」ダイアログボックスを使用して、英語版のタスクマネージャーで確認したコマンドラインの一部(-NoLogoなど)を検索すると、最初の「Process Start」操作イベントに目的のコマンドラインを発見することができました(画面4)。

 

画面4
画面4 「powershell.exe」の「Process Start」操作イベントに「Remote SSH access」クリック時に実行されるコマンドラインが見つかった

英語版(en-us)のコマンドライン:

"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -NoLogo -NoProfile -Command "$title='SSH remote access';$question='This will enable applications or commands that require Secure Shell (SSH) remote access to manage this server. By default, SSH access is only available on a private network. This may be modified in the Firewall settings. Local `Administrator` accounts and the `OpenSSH Users` accounts have access by default. To learn more about OpenSSH in Windows, visit: https://aka.ms/Win32OpenSSH/Docs. Do you want to enable Secure Shell (SSH) remote access?';$yesChoice='Yes';$noChoice='No';$decision=$Host.UI.PromptForChoice($title, $question, @($yesChoice, $noChoice), 0);if ($decision -eq 0) {Get-Service -Name sshd | Set-Service -StartupType Automatic -PassThru | Start-Service}"

 

 日本語版ではウィンドウは一瞬で消えてしまいますが、同じように「リモートSSHアクセス」クリック時のイベントをキャプチャすると、最初の「Process Start」操作イベントに目的の、そしてエラーとなっているらしいコマンドラインが見つかりました。

日本語版(ja-jp)のコマンドライン:

"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -NoLogo -NoProfile -Command "$title='SSH リモート アクセス';$question='これにより、このサーバーを管理するために Secure Shell (SSH) リモート アクセスを必要とするアプリケーションまたはコマンドが有効になります。既定では、SSH アクセスはプライベート ネットワークでのみ使用できます。これはファイアウォールの設定で変更できます。既定では、ローカルの 'Administrator' アカウントと 'OpenSSH Users' アカウントがアクセスできます。Windows の OpenSSH の詳細については、https://aka.ms/Win32OpenSSH/Docs を参照してください。Secure Shell (SSH) リモート アクセスを有効にしますか?';$yesChoice='はい';$noChoice='いいえ';$decision=$Host.UI.PromptForChoice($title, $question, @($yesChoice, $noChoice), 0);if ($decision -eq 0) {Get-Service -Name sshd | Set-Service -StartupType Automatic -PassThru | Start-Service}"

 

 両方のコマンドラインを、Windows Server 2025 Preview日本語版のコマンドプロンプト(cmd.exe)で実行してみると、日本語版のコマンドラインは「行1 文字:185」のところでエラーが発生します。これが一瞬だけ表示されたウィンドウの正体です。英語版のコマンドラインはエラーなしで実行できます(画面5)。

 

画面5
画面5 Windows Server 2025 Preview日本語版でも英語版用のコマンドラインは正しく機能する

 日本語版で実行されるコマンドラインは、英語版のコマンドラインに含まれるコンソール表示メッセージを日本語に訳しているだけのように見えます。しかし、よく見ると重大がミスがあります。英語版のコマンドラインに含まれるPowerShellのスクリプトブロック(-Commandの後)は、ダブルクォート(")で囲まれており、スクリプトブロックの中にはシングルクォート(')とバッククォート(`)が使い分けられています。一方、日本語版のコマンドラインに含まれるダブルクォート(")で囲まれたスクリプトブロックには、シングルクォート(')しか使われていません。英語版のバッククォート(`)の部分もシングルクォート(')になってしまっています。「ローカルの 'Administrator' アカウントと 'OpenSSH Users' アカウント」の部分です。


 シングルクォート(')で囲まれたブロックの中のバッククォート(`)がシングルクォート(')になってしまっているのが問題なのです。なぜ問題なのか詳しくは説明しません。英語版では理由があって使い分けているのに、それを日本語化した時点で使い分けがなくなってしまったというわけです。PowerShellのクォートの規則については、以下のドキュメントで確認してください。

クォート ルールについて|PowerShell(Microsoft Learn)

 クォートの使い分けが正しければ、次のように表示されるはずでした。そして、プリンプトに「はい」と答えることでサービスを有効化できたはずです。

 

SSH リモート アクセス
これにより、このサーバーを管理するために Secure Shell (SSH) リモート
アクセスを必要とするアプリケーションまたはコマンドが有効になります。既定では、SSH アクセスはプライベート
ネットワークでのみ使用できます。これはファイアウォールの設定で変更できます。既定では、ローカルの `Administrator`
 アカウントと `OpenSSH Users` アカウントがアクセスできます。Windows の OpenSSH
の詳細については、https://aka.ms/Win32OpenSSH/Docs を参照してください。Secure Shell (SSH) リモート
アクセスを有効にしますか?
[] はい  [] いいえ  [?] ヘルプ (既定値は "はい"):

 

 英語版もそうですが、このスクリプトの「はい(Yes)」、「いいえ(No)」の前の[]に何も入っていない([Y][N]にするつもりだった?)のが気になりますし、日本語版は日本語入力しなければならない点も気になります。英語版の「$yesChoice='Yes';$noChoice='No'」と日本語版の「$yesChoice='はい';$noChoice='いいえ'」の部分は、どちらも「$yesChoice='&Yes';$noChoice='&No'」であるべきでしょう。問題は日本語版だけでなく、オリジナルの英語版のほうにもありました。そうすれば、現在は「Yes」(英語版)または「はい」(日本語版)と入力する必要がありますが、「Y」または「N」で簡単に対話できるようになります。

 

 いずれにしろ、この問題を回避するもっとも簡単な方法は、単に、最終的に実行されるPowerShellのコマンドラインを実行するだけです。

 

PS C:¥> Get-Service -Name sshd | Set-Service -StartupType Automatic -PassThru | Start-Service

 

 ちなみに、有効から無効への切り替えは、日本語版でも問題なく機能します。無効化の場合、実行されるのは日本語版/英語版共通の以下のコマンドラインです。

 

"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -NoLogo -NonInteractive -NoProfile -Command "Get-Service -Name sshd | Set-Service -StartupType Manual -PassThru | Stop-Service -Force"

 

 この問題、先日正式にリリースされた「Windows Server 2025」日本語版でもまったく同じ状況です。しかし、“新機能”と紹介されている注目の機能がちゃんと機能しないまま正式版として市場に出てくるとは。日本語版(製品版)には他にも、以下のような意味不明な文字列を目にしました。

 

ws2025bug_scr06

画面6 「Windows Admin Center Setup」と「Network ATC」の先頭にある4文字に注目(生成AIによると特定の言語に属する言葉ではないらしい)。これらの機能は、Windows Server 2025で新たに追加されたもの

blog_subscribe

blog_comment

最新記事