概要
RPC (Remote Procedure Call)によるリモートコンピュータ管理は古くからある技術で、ネットでも検索すると2000年のはじめくらいの記事から始まりいろいろなものが引っ掛かります。ただ、どれも10年位前のOSや環境で操作しているものが多く、セキュリティやファイアウォールが強化され、管理コンソールのUIも変更になった最新のOS (Windows 10 Version 1909)では、同じ操作になるよう想像でやってみてもうまく動きませんでした! 今更改めて最新環境で解説する物好きなエンジニアもいらっしゃらないようなので(笑)、試行錯誤した結果をメモしておくことにしました~(^^)/
利用するコマンド
たとえば、リモートPCのプロセス一覧を取得するコマンドなら以下のようなものがあります。
- tasklist /s <リモートPC名> : 古くからあるDOSコマンド
- Get-Process -ComputerName <リモートPC名> : PowerShellのコマンド
- wmic /node:<リモートPC名> process : WMI (Windows Management Instrumentation)
しかし、これらをそのまま実行しても、通常はいろいろなエラーが出ます。
たとえば
C:\>tasklist /s Machine01
エラー: RPC サーバーを利用できません。
とか
C:\>tasklist /s Machine01
エラー: アクセスが拒否されました。
とかです。
(wmicとtasklist.exeは同じエラーを出します。)
解決方法として、いくつかの設定を行う必要がありますが、ネットワークがドメイン環境か非ドメイン環境 (ワークグループ環境)かによって項目が違います。ドメイン環境の方が、ドメイン管理者が簡単にリモート管理できるようになっています。
尚、PowerShellによるリモートPC管理は、別途PowerShell用のリモートアクセス初期化のお作法 (Enable-PSRemoting, winrm quickconfig, Set-Item WSMan, etc.) が必要になるので、今回は扱わないことにします(^_-)-☆
ドメイン環境かどうかを判別するコマンド
まず手始めに、使っているPCがドメイン環境かどうかを調べてみたいと思います。GUIを使って調べる方法もありますが、ここではせっかくなのでコマンドラインで調べる方法をいくつか試してみましょう。
コマンドもいくつかありますが、たとえば
C:\>set user
USERDOMAIN=DOMAIN
USERDOMAIN_ROAMINGPROFILE=DOMAIN
USERNAME=User
USERPROFILE=C:\Users\User
(USERDOMAIN環境変数の名前がPC名と同じなら非ドメイン環境)とか
PS C:\> (Get-WmiObject Win32_ComputerSystem).PartOfDomain
True
(PartOfDomain=Trueで返ってくればドメイン環境、Falseは非ドメイン環境)で判定するのがよいでしょう。
ドメイン環境
ドメイン環境の場合、ドメインの管理者権限を持っているユーザーであれば、同じドメインフォレスト内のPCに対してリモート管理コマンドを発行する際にあまり苦労しません。
ドメインに参加しているPC同士はフツーに通信できますし、ドメイン管理者アカウントを使えばリモートPCの情報を取得する権限も与えられています。ひとつ気にするとすると、ファイアウォールのグループポリシー (gpedit.msc) の設定でしょう。RPCの通信 (TCP135など)がブロックされないようにしておきましょう。
今回はドメイン環境の場合の手順は割愛します。
ワークグループ環境
ワークグループ環境の場合は、追加でいろいろなチェック項目がありメンドウのようで、あまりまとまって設定項目が書かれたページがなかったので、いろいろと調べてまとめてみました。
リモートPCの管理者権限ユーザーで実行
ワークグループ環境の場合は、リモートPCの管理者権限を持つアカウントのユーザー名とパスワードが必要になりますので、これは入手していることが前提です。
C:\>tasklist /s Machine01 /u <ユーザー名> /p <パスワード>
や
C:\>wmic /node:Machine01 /user:<ユーザー名> /password:<パスワード> process
のように指定する必要があります。
(ユーザー名/パスワードを指定しないと、設定がすべて正しくても**「アクセスが拒否されました」**エラーが出ます。)
ネットワーク探索 (pingが通るか? PC名はあっているか?)
まずは管理用PCから対象のリモートPCにpingが通るか試してみましょう。これが通らないと、相手のネットワーク探索が無効になっている (ワークグループ内で探知されない設定になっている)可能性があります。
C:\>ping Macnine01
ping 要求ではホスト Macnine01 が見つかりませんでした。ホスト名を確認してもう一度実行してください。
このような場合は、リモートPCでエクスプローラを開いて「ネットワーク」を開いたときに、**「ネットワーク探索が無効です。」**のエラーが出るようだと、ネットワーク探索が無効になっています。この設定は、既定の状態では無効になっています。
「OK」ボタンをクリックして表示される「黄色い帯」をクリックして表示される「ネットワーク探索とファイル共有の有効化」をクリックします。
その後、表示されるダイアログボックスで、「いいえ」を選択して、プライベートネットワークでのみネットワーク探索を有効にします。
これで設定は完了です。
管理用PCからpingが通るようになったか確認してみてください。
C:\>ping Macnine01
Machine01 [192.168.237.44]に ping を送信しています 32 バイトのデータ:
192.168.237.44 からの応答: バイト数 =32 時間 <1ms TTL=128
192.168.237.44 からの応答: バイト数 =32 時間 <1ms TTL=128
192.168.237.44 からの応答: バイト数 =32 時間 <1ms TTL=128
192.168.237.44 からの応答: バイト数 =32 時間 <1ms TTL=128
192.168.237.44 の ping 統計:
パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
最小 = 0ms、最大 = 0ms、平均 = 0ms
設定を確認したいときは、「Windowsの設定」を開き、「ネットワークとインターネット」をクリックします。
次に、現在利用しているネットワークの「共有オプション」をクリックします。
すると、現在利用しているプロファイル (プライベート)のネットワーク探査についてのオプションが表示されます。
ファイアウォールの例外設定
pingが通るようになっても、なお**「エラー: RPC サーバーを利用できません。」や「リモート コンピューターに接続できませんでした。」**というエラーが出る場合は、ファイアウォールによってトラフィックがブロックされている可能性があります。
ここでは標準で使っているWindows Defenderファイアウォールの場合を見てみます。他のセキュリティソフトウェアを入れている場合は、また違った手順になってきます。
「Windowsの設定」を開き、「ネットワークとインターネット」をクリック、現在利用しているネットワークの「Windowsファイアウォール」をクリックします。
別ウィンドウで開いた「Windowsセキュリティ」の「ファイアウォールによるアプリケーションの許可」をクリックします。
さらに、別ウィンドウで設定画面が表示されるので、「設定の変更」ボタンをクリックして、「Windows Management Instrumentation (WMI)」を探して、使っているプロファイル (プライベート)のところのチェックをONにして「OK」ボタンをクリックします。これでwmic.exeやtasklist.exeのコマンドは通るようになります。
リモートUAC
ワークグループ環境の場合にのみ関係がある設定項目としてリモートUAC (Windows ユーザーアカウント制御) があります。ドメイン環境の時はドメイン管理者であればUACのブロックは受けません。
リモートUACを解除するには、レジストリエディア (regedit)を使って管理者モードでレジストリを変更します。
- 変更(作成)するキー:
\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System
- 変更(作成)する名前:
LocalAccountTokenFilterPolicy
(DWORD) - 値: 1
レジストリを変更した後は、一度リモートPCを再起動します。
これでリモートUACの影響をうけなくなります。
設定がすべてうまくいくと取得できる結果
C:\>tasklist /s Machine01 /u User /p Password
イメージ名 PID セッション名 セッション# メモリ使用量
========================= ======== ================ =========== ============
System Idle Process 0 0 8 K
System 4 0 132 K
Registry 96 0 25,940 K
smss.exe 404 0 580 K
csrss.exe 516 0 2,592 K
wininit.exe 592 0 2,932 K
csrss.exe 604 1 3,004 K
winlogon.exe 692 1 7,128 K
services.exe 736 0 6,184 K
lsass.exe 752 0 12,952 K
svchost.exe 868 0 28,288 K
... (中略) ...
RuntimeBroker.exe 6092 1 13,180 K
ImeBroker.exe 4408 1 10,660 K
svchost.exe 2632 0 8,892 K
dasHost.exe 2564 0 7,248 K
YourPhoneServer.exe 5528 1 9,788 K
svchost.exe 5064 0 4,656 K
SecurityHealthHost.exe 6992 1 30,160 K
YourPhone.exe 1932 1 328 K
RuntimeBroker.exe 9048 1 7,824 K
smartscreen.exe 6872 1 22,968 K
SnippingTool.exe 2032 1 28,648 K
usocoreworker.exe 860 0 15,900 K
SystemSettings.exe 6584 1 72,632 K
SecHealthUI.exe 4040 1 49,456 K
RuntimeBroker.exe 3888 1 17,204 K
WmiPrvSE.exe 1364 0 10,448 K
とか
C:\>wmic /node:Machine01 /user:User /password:Password process
Caption CommandLine CreationClassName CreationDate CSCreationClassName CSName Description ExecutablePath ExecutionState Handle HandleCount InstallDate KernelModeTime MaximumWorkingSetSize MinimumWorkingSetSize Name OSCreationClassName OSName OtherOperationCount OtherTransferCount PageFaults PageFileUsage ParentProcessId PeakPageFileUsage PeakVirtualSize PeakWorkingSetSize Priority PrivatePageCount ProcessId QuotaNonPagedPoolUsage QuotaPagedPoolUsage QuotaPeakNonPagedPoolUsage QuotaPeakPagedPoolUsage ReadOperationCount ReadTransferCount SessionId Status TerminationDate ThreadCount UserModeTime VirtualSize WindowsVersion WorkingSetSize WriteOperationCount WriteTransferCount
System Idle Process Win32_Process 20200320104953.730805+540 Win32_ComputerSystem WINDEV2001EVAL System Idle Process 0 0 4629084531250 System Idle Process Win32_OperatingSystem Microsoft Windows 10 Enterprise Evaluation|C:\WINDOWS|\Device\Harddisk0\Partition2 0 0 9 60 0 60 8192 12 0 61440 0 1 0 1 0 0 0 0 4 0 8192 10.0.18363 8192 0 0
System Win32_Process 20200320104953.730805+540 Win32_ComputerSystem WINDEV2001EVAL System 4 3066 1036718750 System Win32_OperatingSystem Microsoft Windows 10 Enterprise Evaluation|C:\WINDOWS|\Device\Harddisk0\Partition2 1313938 4148340 3042 196 0 216 13864960 764 8 200704 4 1 0 1 0 325 920896 0 148 0 3932160 10.0.18363 135168 2359 438755707
Registry Win32_Process 20200320104952.546576+540 Win32_ComputerSystem WINDEV2001EVAL Registry 96 0 50625000 Registry Win32_OperatingSystem Microsoft Windows 10 Enterprise Evaluation|C:\WINDOWS|\Device\Harddisk0\Partition2 813 4547 169480 7404 4 186764 257949696 250460 8 7581696 96 20 289 30 497 4 2048 0 4 0 149127168 10.0.18363 26722304 15527 286720000
smss.exe Win32_Process 20200320104953.741647+540 Win32_ComputerSystem WINDEV2001EVAL smss.exe 404 56 625000 smss.exe Win32_OperatingSystem Microsoft Windows 10 Enterprise Evaluation|C:\WINDOWS|\Device\Harddisk0\Partition2 477 6954 1273 1160 4 1224 2203368091648 1260 11 1187840 404 4 13 9 24 21 9108 0 2 0 2203359707136 10.0.18363 593920 23 67732
... (中略) ...
WmiPrvSE.exe C:\WINDOWS\system32\wbem\wmiprvse.exe Win32_Process 20200321190544.870086+540 Win32_ComputerSystem WINDEV2001EVAL WmiPrvSE.exe C:\WINDOWS\system32\wbem\wmiprvse.exe 8460 165 156250 1380 200 WmiPrvSE.exe Win32_OperatingSystem Microsoft Windows 10 Enterprise Evaluation|C:\WINDOWS|\Device\Harddisk0\Partition2 73 936 2222 2764 868 2764 2203396718592 8528 8 2830336 8460 11 77 11 78 0 0 0 9 156250 2203396718592 10.0.18363 8728576 0 0
といった具合に取れます。
まとめ
まとめると、エラーが出た場合のチェック項目には以下のようなものがあります。
- ドメイン環境かどうか: リモートPCと管理用PCが同じドメイン環境に入っている場合はチェック項目が大幅に減ります。ドメインがないワークグループ環境の場合は、追加でいくつかの設定の確認と変更が必要です。
- ネットワーク探索/サブネット: リモートPCが管理用PCから探索できるようにします。これが設定されていないと**「エラー: RPC サーバーを利用できません。」**が出ます。
- ファイアウォールの例外設定:WMIが例外として許可されるように設定します。これが設定されていないと **「エラー: RPC サーバーを利用できません。」**が出ます。
- 管理者権限: リモートPCの管理者権限で実行する必要があります。これを忘れると**「エラー: アクセスが拒否されました。」**が出ます。
- リモートUACの設定: ワークグループ環境の場合は、リモートPCのレジストリを変更する必要があります。これが設定されていないと**「エラー: アクセスが拒否されました。」**が出ます。
また、他にもリモートPC管理ができるコマンドはいろいろあるので、使ってみてください!
おまけ: WMIではprocess call createではインタラクティブプロセスを起動できない
WMIではリモートPCでのプロセスの起動もできますが、セキュリティ上の理由からインタラクティブなプロセスは作成できないとのこと。
For security reasons the Win32_Process.Create method cannot be used to start an interactive process remotely.
まあ、これができたらいろいろな攻撃ができてしまいますものね。
C:\>wmic /node:Machine01 /user:<ユーザー名> /password:<パスワード> process call create <コマンド名>
調べてみましたが、calc.exeなど一部のアプリはインタラクティブモードで起動するものの、notepad.exeやcmd.exeなどはタスクマネージャーを見るとバックグラウンドでプロセスは立ち上がるものの、特にそれ以上実行が進んでいる様子はありません。
Sysinternalで配られているPsExecも調べてみましたが、バックグラウンドプロセスしか作れない事情は同じようでした。。。Windows 7ではできたのかもしれないですが、最新のWindows 10 Version 1909ではできないです。
参考情報