Windowsサーバ上のプログラムやコマンドを、クライアントPCから実行したいケースがあります。
普通はリモートデスクトップでサーバにログインしていろいろ操作するわけですが、コマンドで実行したいケースも有ります。(イメージとしてはTelnetやSSHのような感じ)
こういうケースに有用なのがPsExecというツールです。
これを使うとリモートコンピュータのプログラムやコマンドを実行することが出来ます。
簡単な例としては下記のような感じです。
・リモート接続先のIPアドレスを表示
PsExec.exe \\192.168.0.163 -u hoge -p hogepass ipconfig
・リモートコンピュータをコマンドプロンプトで操作
PsExec.exe \\192.168.0.163 -u hoge -p hogepass cmd
さらに、PsExec はリモートコンピュータだけでなく自身のLocalSystemアカウント権限(NT AUTHORITY\Systemユーザ)での操作も可能とします。
・LocalSystem権限でレジストリを編集
psexec.exe -s -i regedit
・実行後Ctrl+Alt+Del→Alt+Tabでwinlogonのdesktopでcmd.exeをLocalSystem権限で動かす
psexec -x -i -s cmd
リモートに接続する場合、PsExec.exe はリモートマシンの管理共有 ADMIN$ に接続を行うようです。なので、ローカルもしくはリモートマシンがHomeエディションの場合、すべての接続は Guest 扱いとなり、その結果うまくつなぐことはできないということが、ghostwind@とりあえず.備忘録 - Windows/Windows XP Home Edition/psexec.exe を実行させるに書かれてました。
PsExecを使うと色々活用範囲が広がりそうです。
例えば、クライアントPCを一般ユーザで利用しており、帰社時にサーバの電源を落とさせたいけどサーバへのログインはさせたくない場合などは、下記のコマンドを実行するバッチを動かしてもらえればいいでしょう。(もちろんパスワードに関しては一工夫する必要がありますが。)
PsExec.exe \\192.168.0.163 -u hoge -p hogepass shutdown -f -s -t 30
また、クライアントPCに対してもPsExecを実行することでユーザに気付かれすに作業することができます。
(ファイル操作はドライブの管理共有使えればできますが、何かのプログラムやインストールをこっそり実行するときにPsExecを使うと便利でしょう)
また、レジストリに隠し領域にあるパスワードハッシュを使ってPsExecを利用しセッション確立して、事実上乗っ取ることも可能ですね。
このあたりの話は、 PsExecを利用したセッション確立が参考になります。(パスワードハッシュはSAMデータベース(レジストリのHKLM\SAM)から取れます)
時間があったらぜひ検証してみたいですね。
また、PsExecを提供しているMSのSysinternalsには他にも数多くのユーティリティがあります。3流PGが愛用しているProcessExplorerもここで提供されているようです。
Windows管理者必携、Sysinternalsでシステムを把握する - @ITでそのうちのいくつかが紹介されています。
参考: