[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
http://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 要求を受け付けるため、
HTTP://* 上に WinRM リスナを作成します。

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

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

image

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

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

WinRM サービスの種類を正しく変更できました。
WinRM サービスが開始されました。
このコンピュータ上のあらゆる IP への WS-Man 要求を受け付けるため、
HTTP://* 上に 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 でサービスも手動で起動する必要があることに注意ください。(http://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 を使用しないときは以下を設定してください。(http://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 を使う場合はこの点もよしなにしてくれているので、以下の手順は不要です。(http://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 =
http://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
http://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
http://support.microsoft.com/default.aspx?scid=959815

Windows Remote Management Command-Line Tool (Winrm.cmd)
http://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
http://support.microsoft.com/kb/971244/ja

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

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

Comments (0)

Skip to main content