[WinRM:初級編] WinRM を構成してみよう!

みなさんごきげんよう、ういこです。
先日より WinRM の担当だということが発覚してからどっきどきの毎日です。正直、ぶっちゃけてしまうと WinRM と WMI って、あんまり変わらなくない?と思ってしまっていました。Active Directory Web Service みたいに、世の中全部 http で何とかしようかという流れの一環なんでしょうか。
何でこんなのがこのごろ流行りの女のコ状態なのかさっぱりわからなかったので、ちょっといまさらジローな感じでいじってみました。
さああなたも WinRM の世界へ行ってみたいと思いませんかウフッフー。
壊れ気味ですみません。

さて、Windows Vista / Windows Server 2003 R2 / Windows Server 2008 (Server Core 含む) から Windows Remote Management (WinRM) と Windows Remote Shell (WinRS) いう機能が仲間入りしました。
この二つは、以下のような関係です。

・WinRM … リモート管理アプリケーションの「サーバ」に位置するもの
・WinRS … WinRM の「クライアント」に当たるもの

今日は WinRM を構成してみたいと思います。

※補足※ Windows Server 2003 などで WinRM を使う際は、必ず下記サポート技術情報をご覧ください。

An update is available for the Windows Remote Management feature in Windows Server 2003 and in Windows XP https://support.microsoft.com/default.aspx?scid=kb;EN-US;936059

WinRM を構成する際は、"winrm qc" を使うと楽です。
実際には、WinRM quickconfig なんですが、qc が省略版みたいになっています。
初回実行では以下のように表示されるようです。

image

>winrm qc WinRM は、管理用にこのコンピュータへのリモート アクセスを許可するように設定されていません。 次の変更を行う必要があります:

WinRM サービスの種類を遅延自動開始に設定します。 WinRM サービスを開始します。 このコンピュータ上のあらゆる IP への WS-Man 要求を受け付けるため、https://* 上に WinRM リスナを作成します。

変更しますか [y/n]?

とりあえず毎回こういう内容が表示されるたびにどきどきしますが、話の都合上 y を選ばないと先に進まないので y で。

image

変更しますか [y/n]? y

WinRM はリモート管理用に更新されました。

WinRM サービスの種類を正しく変更できました。 WinRM サービスが開始されました。 このコンピュータ上のあらゆる IP への WS-Man 要求を受け付けるため、https://* 上に WinRM リスナを作成しました。

こんな風に表示されます。
ちなみに、"WS-Man" は WS-Management の略なのだと思われます。どこの新マンだよ。とか思った私は昭和 50 年代。

さて、この構成をした後、[管理ツール] の [サービス] の Windows Remote Management サービスの説明を見てみます。

image

Windows リモート管理 (WinRM) サービスは、リモート管理用の WS-Management プロトコルを実装しています。WS-Management は、リモートのソフトウェアとハードウェアの管理に使用される標準の Web サービス プロトコルです。WinRM サービスは、ネットワーク上で WS-Management 要求をリッスンして処理します。WinRM サービスがネットワークをリッスンできるように、winrm.cmd コマンド ライン ツールを使用するかグループ ポリシーを介して、WinRM サービスにリスナを構成する必要があります。このサービスを使用することにより、WMI データへのアクセスとイベントの収集が可能になります。イベントの収集およびイベントに対するサブスクリプションを実行する場合、WinRM サービスが稼働している必要があります。WinRM メッセージは、HTTP および HTTPS をトランスポートとして使用します。WinRM サービスは IIS には依存しませんが、同じコンピュータ上で 1 つのポートを IIS と共有するよう事前に設定されています。このサービスでは URL のプレフィックスとして /wsman が予約されています。IIS との競合を避けるため、IIS 上のどの Web サイトでも /wsman が URL プレフィックスとして使用されていないことを確認する必要があります。

… ながっ。

まずポイントとしては、

・WS-Management プロトコルのメッセージを送受信できるように HTTP および HTTPS のポートを構成する
・インターネット接続ファイアウォール (ICF) の例外に WinRM サービスを設定し、http と https をのポートをあけてあげるように設定する

こんな感じのようです。
ただ、winrm qc したあと、"winrm create winrm/config/listener?Address=*+Transport=HTTP" みたいにやると、怒られるので、winrm qc はその辺の WinRM が必要な既定設定をしてくれるみたいです。 だもんで、winrm qc をしてたら以下は不要ってことですね。ちなみに winrm qc を使わないときは、net start winrm でサービスも手動で起動する必要があることに注意ください。(https://msdn.microsoft.com/en-us/library/aa384372(VS.85).aspx)

image

> winrm create winrm/config/listener?Address=*+Transport=HTTP WSManFault Message ProviderFault WSManFault Message = WS-Management サービスは構成操作を実行できません。アドレス=* およびトランスポート=HTTP の構成のリスナは は既に存在します。 同じアドレスおよびトランスポート値で作成するには、まず既存のリスナを 削除する必要があります。

エラー番号: -2144108493 0x80338033 既に存在するため、WS-Management サービスはリソースを作成できません。

↑怒られた

そしてポートを空けてあげたら、あっさり OK と帰ってきて拍子抜け。そうですか、さようでございますか…。これも winrm qc 様がよしなにしてくれてる様子。 winrm qc を使用しないときは以下を設定してください。(https://msdn.microsoft.com/en-us/library/aa384372(VS.85).aspx)

image

> netsh firewall add portopening TCP 80 "Windows Remote Management" OK

ちなみにファイアウオールが無効になっていると winrm qc は動作しないらしいので、Vista などでは、WinRM サービスは、遅延スタート (delayed-auto) にしておくとよいでしょう。 ただし、上述の winrm qc を使う場合はこの点もよしなにしてくれているので、以下の手順は不要です。(https://msdn.microsoft.com/en-us/library/aa384372(VS.85).aspx) 以下は winrm qc を使わない場合の設定です。

image

>sc config "WinRM" start= delayed-auto [SC] ChangeServiceConfig SUCCESS

さて、構成したっぽいので、WS-Management サービスを実行していることを確認してみます。

image 

>winrm id IdentifyResponse ProtocolVersion = https://schemas.dmtf.org/wbem/wsman/1/wsman.xsd     ProductVendor = Microsoft Corporation ProductVersion = OS: 6.0.6001 SP: 1.0 Stack: 1.1

構成したマシン上のすべての WinRM リスナの一覧を列挙してみましょう。
列挙は WinRM enumerate ですが、長いので、 WinRM e でいけます。

image

>winrm e winrm/config/listener Listener Address = * Transport = HTTP Port = 80 Hostname Enabled = true URLPrefix = wsman CertificateThumbprint ListeningOn = 127.0.0.1, 157.60.17.126, ::1, (※中略)

次に構成の設定を見てみましょう。

image

>winrm get winrm/config Config MaxEnvelopeSizekb = 150 MaxTimeoutms = 60000 MaxBatchItems = 20 MaxProviderRequests = 25 Client NetworkDelayms = 5000 URLPrefix = wsman AllowUnencrypted = false Auth Basic = false Digest = true Kerberos = true Negotiate = true Certificate = true DefaultPorts HTTP = 80 HTTPS = 443 TrustedHosts Service RootSDDL = O:NSG:BAD:P(A;;GA;;;BA)(A;;GR;;;ER)S:P(AU;FA;GA;;;WD)(AU;SA;GWGX;;;WD) MaxConcurrentOperations = 100 EnumerationTimeoutms = 60000 MaxConnections = 5 AllowUnencrypted = false Auth Basic = false Kerberos = true Negotiate = true Certificate = false DefaultPorts HTTP = 80 HTTPS = 443 IPv4Filter = * IPv6Filter = * Winrs AllowRemoteShellAccess = true IdleTimeout = 900000 MaxConcurrentUsers = 5 MaxShellRunTime = 2147483647 MaxProcessesPerShell = 5 MaxMemoryPerShellMB = 80 MaxShellsPerUser = 2

WinRM サービスの状態を見てみます。

image

>winrm get wmicimv2/Win32_Service?Name=WinRM Win32_Service AcceptPause = false AcceptStop = true Caption = Windows Remote Management (WS-Management) CheckPoint = 0 CreationClassName = Win32_Service Description = Windows リモート管理 (WinRM) サービスは …(※以下上記サービスの説明と同じ文言みたいなので省略)…

    DesktopInteract = false DisplayName = Windows Remote Management (WS-Management) ErrorControl = Normal ExitCode = 0 InstallDate = null Name = WinRM PathName = C:\Windows\System32\svchost.exe -k NetworkService ProcessId = 1596 ← 上記コマンド実行時点のプロセス ID ServiceSpecificExitCode = 0 ServiceType = Share Process Started = true StartMode = Auto StartName = NT AUTHORITY\NetworkService State = Running Status = OK SystemCreationClassName = Win32_ComputerSystem SystemName = UIKOUVISTA TagId = 0 WaitHint = 0

ちなみに、リモート PC のサービスの状態を見たいときは、-r:<確認したいマシン名> でいけます。
以下は英語版 Windows Server 2008 のマシン "uikoutest2008" の状態を確認した例です。
上のローカルの PC は日本語 OS なので Description が日本語ですが、ターゲットマシンが英語版 OS だからか、Description は英語で返ってきてますね。

image

>winrm get wmicimv2/Win32_Service?Name=WinRM -r:uikoutest2008 Win32_Service AcceptPause = false AcceptStop = true Caption = Windows Remote Management (WS-Management) CheckPoint = 0 CreationClassName = Win32_Service Description = Windows Remote Management (WinRM) service implements … (以下省略、英語版 OS だから説明も英語できてますね) … DesktopInteract = false DisplayName = Windows Remote Management (WS-Management) ErrorControl = Normal ExitCode = 0 InstallDate = null Name = WinRM PathName = C:\Windows\System32\svchost.exe -k NetworkService ProcessId = 1124 ServiceSpecificExitCode = 0 ServiceType = Share Process Started = true StartMode = Auto StartName = NT AUTHORITY\NetworkService State = Running Status = OK SystemCreationClassName = Win32_ComputerSystem SystemName = UIKOUTEST2008 TagId = 0 WaitHint = 0

★ さわやか参考ドキュメント

Installation and Configuration for Windows Remote Management
https://msdn.microsoft.com/en-us/library/aa384372(VS.85).aspx (⇒ How to Configure WinRM without using quickconfig の項もご覧ください)

DCOM Error 10021 is logged when you run a WinRM command against a remote computer that has update 936059 applied
https://support.microsoft.com/default.aspx?scid=959815

Windows Remote Management Command-Line Tool (Winrm.cmd)
https://technet.microsoft.com/en-us/library/cc781778(WS.10).aspx

Windows Remote Management (WinRM) does not accept HTTP authorization requests that are larger than 16 KB on a computer that is running Windows Server 2008 or Windows Vista
https://support.microsoft.com/kb/971244/ja

次は、「ドキッ!グループポリシーで WinRM を設定!?」編をお送りする予定です。

ういこう@井上陽水ゴッコが今、熱い。