WinRM(Windows リモート管理 ) ~ windows

WinRM(Windows リモート管理、Windows Remote Management )は別なコンピュータをリモート操作することを可能にする仕組みです。

WS-Management プロトコルを実装し、Windows OS以外(例えばUnix)などにも接続ができます。

リモート操作するだけでなく、別なコンピュータからシェルを実行できるなど使用するととても便利な機能です。

WinRMを使用するための準備

  • ホストの設定(リモートされる側)
  • クライアントの設定(リモートする側)

リモートされる側(Windowsサーバ[ホスト]) WinRMを有効

PowerShellを管理者として実行

Enable-PSRemoting

※Windows2012R2の場合はデフォルトで有効になっていますので設定する必要はありません。

ネットワークがプライベートでない場合は

Enable-PSRemoting -SkipNetworkProfileCheck

強制的に起動する場合は

Enable-PSRemoting -Force

 

リモートする側(WindowsPC[クライアント]) WinRMを有効

PowerShellを管理者として実行

Enable-PSRemoting

うまく動かない場合は

winrm quickconfig

下記コマンドが自動で流れる場合があります。

Enable-PSRemoting -Force

すると次のメッセージがでます。

WinRM は要求を受信するように更新されました。
WinRM サービスの種類を正しく変更できました。
WinRM サービスが開始されました。
WinRM はリモート管理用に更新されました。
WinRM ファイアウォールの例外を有効にしました。
ローカル ユーザーにリモートで管理権限を付与するよう LocalAccountTokenFilterPolicy を構成しました。

 

localhostへのリモート

試しに自分のPCに接続(loacalhost)する場合は

Enter-PSSession -ComputerName localhost

接続すると[localhost]となり、リモートできていることが分かります。

そこでdirコマンドを入れます。

[localhost]: PS D:\Users\Adminstrator\Documents>dir
[localhost]: PS D:\Users\Adminstrator\Documents>dir
-a---- 2016/12/03 0:33 312 Log1.log
-a---- 2016/11/16 22:07 408 Log2.log

リモートから抜けるときは

[localhost]: PS D:\Users\Adminstrator\Documents>Exit-PSSession

TrustedHostsの確認と設定

TrustedHostsはホスト側で行うのではなく、クライアント側で行います。そこが不思議なのですが、自分のつなげたいコンピュータのIPを指定します。

TrustedHostsの確認

Get-Item WSMan:\localhost\Client\TrustedHosts
   WSManConfig: Microsoft.WSMan.Management\WSMan::localhost\Client

Type            Name                           SourceOfValue   Value
----            ----                           -------------   -----
System.String   TrustedHosts

設定されていないことが分かります。

TrustedHostsの設定

すべて対象にするには

Set-Item WSMan:\localhost\Client\TrustedHosts -Value *
   WSManConfig: Microsoft.WSMan.Management\WSMan::localhost\Client

Type            Name                           SourceOfValue   Value
----            ----                           -------------   -----
System.String   TrustedHosts                                   *

 

個別に対応するには

Set-Item WSMan:\localhost\Client\TrustedHosts -Value 接続先のIPアドレス1
Set-Item WSMan:\localhost\Client\TrustedHosts -Value “接続先のIPアドレス1,接続先のIPアドレス2"

解除するには

Clear-Item WSMan:\localhost\Client\Trustedhosts

とりあえず、すべて対象にしておけばよいと思います。

別なコンピュータへのリモート接続

TrustedHostsが設定されているので、リモート接続するにはIPとユーザIDを入れます。

Enter-PSSession 接続先のIPアドレス -Credential 接続先ユーザID
(例)Enter-PSSession 192.168.100.1 -Credential Administrator

つながると次のようになります。

[192.168.100.1]: PS D:\Users\Adminstrator\Documents>

抜けるときは「Exit-PSSession」または「exit」

コマンドをリモートで投げる

別なPCにあるプログラム実行したい場合は、WinRSコマンドを使用します。

winrs -r:接続先のIPアドレス -u:接続先ユーザID -p:接続先パスワード コマンド
(例)winrs -r:192.168.100.1 -u:Administrator -p:xxxxx d:\bat\test.bat

WiinRMを無効にする(使用を止めるとき)

Trustedhostsの解除

Clear-Item WSMan:\localhost\Client\Trustedhosts

WinRMを無効にする

Disable-PSRemoting
警告: セッション構成を無効にしても、Enable-PSRemoting または Enable-PSSessionConfiguration
コマンドレットによる変更がすべて元に戻るわけではありません。次の手順に従って、手動で変更を元に戻す必要がある可能性があります。
    1. WinRM サービスを停止または無効にします。
    2. IP アドレスを使用して要求を受け付けるリスナーを削除します。
    3. WS-Management 通信用のファイアウォール例外を無効にします。
    4. LocalAccountTokenFilterPolicy の値を 0 に戻します。これにより、リモート アクセスがこのコンピューターのAdministrators グループのメンバーに制限されます。

何かあいまいな表現です。

QuickConfigでは次のメッセージがでます。

Windows リモート管理 (WinRM) サービスを使用して、このコンピューターのリモート管理を有効にするコマンド
"Set-WSManQuickConfig" を実行します。
 これには、次の処理が含まれます:
    1. WinRM サービスを開始または (既に開始されている場合は) 再起動します。
    2. WinRM サービスのスタートアップの種類を [自動] に設定します。
    3. どの IP アドレスでも要求を受け付けるリスナーを作成します。
    4. WS-Management トラフィック用の Windows ファイアウォールの受信規則の例外を有効にします (HTTP のみ)。

行わなくても良いのですが、気になる人は次のものも実行しておくと良いと思います。

WinRMリスナーポートの確認

Get-Item WSMan:\localhost\Listener\*\Port
   WSManConfig: Microsoft.WSMan.Management\WSMan::localhost\Listener\Listener_1084132640

Type            Name                           SourceOfValue   Value
----            ----                           -------------   -----
System.String   Port                                           5985

WinRM  ポートTCP 5985

WinRMを使用するにはファイアウォールで「ポート5985」が開いていることが必要です。

WinRMを行わない場合、不要ですので無効にしてください。

リスナーの削除

不要の場合はリスナーを削除してください。

リスナーの削除

Remove-WSManInstance winrm/config/listener -SelectorSet @{Address="*";Transport="HTTP"}

リスナーの追加(参考)

New-WSManInstance winrm/config/listener -SelectorSet @{Address="*";Transport="HTTP"}

自分(ローカル・ループバック・アドレス)のリスナーの追加(参考)

New-WSManInstance winrm/config/listener -SelectorSet @{Address="IP:127.0.0.1″;Transport="HTTP"}

自分(NIC[LANカード])のリスナーの追加(参考)

New-WSManInstance winrm/config/listener -SelectorSet @{Address="IP:xxx.xxx.xxx.xxx";Transport="

リスナーの確認

get-WSManInstance winrm/config/listener -SelectorSet @{Address="*";Transport="http"}

レジストリLocalAccountTokenFilterPolicy の値を変更

「HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v LocalAccountTokenFilterPolicy」のレジストリを「1」から「0」に変更

PowerShellで変更

確認

get-ItemProperty -Name LocalAccountTokenFilterPolicy -path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System

変更

set-ItemProperty -Name LocalAccountTokenFilterPolicy -path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System  -value 0

新規(参考)

new-ItemProperty -Name LocalAccountTokenFilterPolicy -path HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System -propertyType DWord -value 0

windows

Posted by eightban