[鯖缶] WinRM の有効化と Linux からの WSMan 経由のアクセス

2018年1月6日

 なにやら WinRM という仕組みがあるようです。

 そもそも WinRM って何かというと、ザクっといえば WMI (Windows Management Instrumentation) を Webサービス (WS-Management プロトコル, HTTP SOAP ベース, WS は WebService の略) でアクセスできる版、みたいなやつらしいです。一方 WMI は DCOM ベースのアクセスらしいです。しかし WMI 自体が WBEM (Web Based Enterprise Management) の Microsoft の実装なので Web なんじゃないの?という話なわけですが、まあそれを言ったら DCOM も ActiveX だったりするわけで Web ですよね、みたいな話なのかな? このあたりの関係性はよくわかりませんが・・・

 なにはともあれ有効にしてみます。

  1. 管理者権限でコマンドプロンプトを起動します。
  2. winrm qc を実行します。

     qc は QuickConfig の略らしいです。

    winrm qc
    
  3. WinRM サービスを開始します。

     WinRM サービスを開始します。変更しますか [y/n]? と聞いてくるので y を押します。
     しかしここで public なネットワークに接続していると失敗します。

    WinRM はこのコンピューター上で要求を受信するように設定されていません。
    次の変更を行う必要があります:
    
    WinRM サービスを開始します。
    
    変更しますか [y/n]? y
    
    WinRM は要求を受信するように更新されました。
    
    WinRM サービスが開始されました。
    WSManFault
        Message
            ProviderFault
                WSManFault
                    Message = このコンピューターのネットワーク接続の種類の 1 つが Public に設定されているため、WinRM ファイアウォール例外は機能しません。 ネットワーク接続の種類を Domain または Private に変更して、やり直してください。
    
    エラー番号:  -2144108183 0x80338169
    このコンピューターのネットワーク接続の種類の 1 つが Public に設定されているため 、WinRM ファイアウォール例外は機能しません。 ネットワーク接続の種類を Domain ま たは Private に変更して、やり直してください。
    

     なので WinRM を有効にする PC はルーターの内側にあるか、または public なネットワークにつながっていない状況で実行します。

     ところが Hyper-V をインストールしていたりしますと仮想 NIC が作成されていますが、それが「識別できないネットワーク」になっていると public 扱いされてはねられてしまいます。そういう場合はグループポリシーを操作するなどをして、一時的にでも public ネットワークが存在しないようにします。

  4. あらためて WinRM の設定を行います。

     WinRM サービスを開始します。変更しますか [y/n]? で y を
     WinRM ファイアウォールの例外を有効にします。~ 変更しますか [y/n]? で y を選択します。

    C>winrm qc
    WinRM はこのコンピューター上で要求を受信するように設定されていません。
    次の変更を行う必要があります:
    
    WinRM サービスを開始します。
    
    変更しますか [y/n]? y
    
    WinRM は要求を受信するように更新されました。
    
    WinRM サービスが開始されました。
    WinRM は、管理用にこのコンピューターへのリモート アクセスを許可するように設定されていません。
    次の変更を行う必要があります:
    
    WinRM ファイアウォールの例外を有効にします。
    ローカル ユーザーにリモートで管理権限を付与するよう LocalAccountTokenFilterPolicy を構成してください。
    
    変更しますか [y/n]? y
    
    WinRM はリモート管理用に更新されました。
    
    WinRM ファイアウォールの例外を有効にしました。
    ローカル ユーザーにリモートで管理権限を付与するよう LocalAccountTokenFilterPolicy を構成しました。
    

    LocalAccountTokenFilterPolicy ってのは リモート UAC のことらしいです。(=リモート接続で権限が昇格するようにする)

  5. WinRM を使用してデータを取ってみます。

     サービスの一覧を取得します。 e というのは enumerate の略です。wmicimv2/Win32_Service というのはアクセスするリソース名のようです。wmicimv2/~ で wmi のクラス名を指定すれば取得できるようです。

    winrm e wmicimv2/Win32_Service
    

     特定のサービスの情報を取得する場合は get を使用します。取得するサービス名は指定は「?Name=サービス名」といった形式で指定します。

    winrm get wmicimv2/Win32_Service?Name=W32time
    
  6. Linux からのアクセスが可能なように構成します。

     現在の設定を確認します。デフォルトの設定では Basic 認証が無効 (Basic = false), 平文が不可 (AllowUnencrypted=false) になっているはずです。

    winrm get winrm/config/service
    

     Linux からのアクセスを可能にするため Basic 認証を有効、平文を許可にします。
     (もっとセキュアな設定はあると思いますが、ここでは考えないことにします)

    winrm set winrm/config/service/auth @{Basic="true"}
    winrm set winrm/config/service @{AllowUnencrypted="true"}
    
  7. CentOS からアクセスできるかを確認します。

     まず wsmancli のインストールをします。

    yum install wsmancli
    

     CentOS ではなく Ubuntu や WSL (Bash on Ubuntu on Windows) など Debian系Linux の場合は apt-get します。

    apt-get install wsmancli
    

     以下のような感じでアクセスします。
     この際、user はドメインユーザーは指定できません。なので WinRM でアクセスする用のローカルユーザーを作成して置く必要があります。

    wsman -u [localuser] -p [password] -y basic -h 127.0.0.1 -P 5985 enumerate http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service
    wsman -u [localuser] -p [password] -y basic -h 127.0.0.1 -P 5985 get http://schemas.microsoft.com/wbem/wsman/1/wmi/root/cimv2/Win32_Service?Name=W32time
    





カテゴリー: Linux, OS, Windows, WMI, サーバー管理, 環境設定

Follow comments via the RSS Feed | Leave a comment | Trackback URL

コメントを投稿する

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


«   »
 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org