最近、クライアントの一部でOSのインストールをし直して、いつものようにPsExecでリモートから一斉にバッチを実行しようとしたら、そのし直したマシンのみ接続不可でPsExecでの接続ができませんでした。以下のような感じです。
D:\PSTools> PsExec.exe \\CLIENT -u DOMAIN\USER -p PASSWORD cmd.exe
PsExec v2.2 - Execute processes remotely
Copyright (C) 2001-2016 Mark Russinovich
Sysinternals - www.sysinternals.comCouldn't access CLIENT:
ネットワーク パスが見つかりません。Make sure that the default admin$ share is enabled on CLIENT.
ネットワークパスが見つからないとのことで、PsExecの実行マシンからpingを実行すると
D:\PSTools> ping CLIENT
CLIENT.domain.local [192.168.1.10]に ping を送信しています 32 バイトのデータ:
要求がタイムアウトしました。
要求がタイムアウトしました。
要求がタイムアウトしました。
要求がタイムアウトしました。192.168.1.10 の ping 統計:
パケット数: 送信 = 4、受信 = 0、損失 = 4 (100% の損失)、
とのことで名前解決はできているものの、ICMPへの応答がない状態。これはファイアウォールの設定だなと推測できます。ただ問題ないマシンも、今回のマシンも特に設定はしていないんですよね。インストールして設定した内容はいつもどおりで、できているのとできていないとの差が当初は不明でした。
インストール状況を振り返って、ひとつだけしてない設定があることに思い当たりました。ネットワーク共有を作って設定ファイルのやりとりに作っていたのですが、この問題あるマシンでは共有フォルダを作成していませんでした。そこで共有フォルダを作ると、今回は問題なくPsExecで接続できました。pingも応答ありです。
なるほど、PsExecでの接続にファイアウォールの設定が必要なことは知っていましたが、共有設定するとインストールした状態からファイアウォールも開けられて、結果、PsExecでの接続もできるようになるんですね。上記エラーもよく読めばadmin$共有を有効化せよとあります。逆に言えば共有設定するということは、このPsExecに限らずどんな相手に対しても結構大きな穴が開くということで、気をつけないといけないですね。