3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援→開発戻り浦島太郎状態の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。

(ツール)リモートコンピュータ(Windows)のコマンドやプログラムを実行するPsExec

Windowsサーバ上のプログラムやコマンドを、クライアントPCから実行したいケースがあります。

普通はリモートデスクトップでサーバにログインしていろいろ操作するわけですが、コマンドで実行したいケースも有ります。(イメージとしてはTelnetSSHのような感じ)

こういうケースに有用なのが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でそのうちのいくつかが紹介されています。

参考:

PsExec が便利 - Ab. の日記

知っておくと便利な PsExec の便利な利用方法