リモートのNTマシン上でコマンドを実行する

対象プラットフォーム

質問

Windows NT の運用管理を行なっていますが, ちょっとした操作を行なうのにもコンソールの前までいく必要があり, 不自由を感じています。GUI 操作はともかく、 UNIX の telnet のように, リモートマシンのコマンドラインを気軽に操作する手段はないのでしょうか?

回答

Windows NT には UNIX の telnet や X Window System のように遠隔からの操作を行なう手段やコマンドが標準では提供されておりません。 これにはさまざまな理由が考えられますが、 Windows NT の設計が行なわれた時代の PC ネットワークが部門内の局所的なネットワークであり, 多数のサーバが WAN 経由で接続されて、遠隔からの集中管理が必要とされている現在のような状況を想定していなかったことが大きいと思います。 そうはいっても, 遠隔から多数の Windows NT マシンを管理する場合に、ちょっと遠隔のマシン上で操作をできればということも多いと思います。そのための製品も幾つかあるのですが, まずは OS 付属のコマンドで実現できることとして、 at コマンドを使っての対策を紹介しようと思います。

at コマンドでもここまでできる

at コマンドは本来スケジューリングされたジョブを定期的に動作させるためのツールです。 しかし at コマンドは任意の時間に任意のジョブを実行することが可能で、ジョブの設定も随時変更可能ですので、遠隔マシン上で必要な時にコマンドを発行するのに使うこともできるのです。 例えば、遠隔のマシンにバッチファイルをコピーした上で、遠隔のマシン上でそのバッチファイルを数分後に実行するよう at コマンドで設定を行なうことで、遠隔のマシンで任意のコマンドを実行することができます。 出力をファイルなどに行なった上で、実行終了後にファイルの内容を閲覧すれば、実行が正しく行なわれたかどうかを知ることができます。 筆者の部署でも、 WAN越しにある遠隔のマシン間でファイルコピーを行ないたい時や、負荷試験などで数十台のマシンから一斉にコマンドを実行したい時などには非常に重宝しています。 図XXは当方が試験に使っているバッチファイルの例です。

at コマンドの限界

しかし、こうした使用方法は at コマンドの本来の想定していた使われ方ではありませんので、かなりの制限事項があります。 最大の問題点は, ユーザの介在が必要なコマンドは実行できないことでしょう。 コマンド実行中に対話的な操作は一切行なえないため、実行中にユーザの入力が必要なコマンドは実行できません。 更に, コマンドを実行するプロセスの権限がスケジュールサービスの実行アカウントの権限になってしまうという問題もあります。 例えば、スケジュールサービスのデフォルトではシステムアカウントとして実行されるため、ネットワーク上の資源にアクセスすることはできないという問題が発生します。 また手元のマシンと遠隔のマシンの時間があっていないとコマンドを発行する時間がずれてしまいますので、あらかじめ net time コマンドなどを使ってマシン間の時間は合わせておくこと、遠隔の各マシンではスケジュールサービスを起動しておくことなど、幾つかの準備も必要です。 at コマンドを使う際の注意点については、過去の Q&A でも幾つか扱っています。 XX 月号の XX や XX 月号の XX なども参照してください。

リソースキットの rcmd コマンドを使おう

対話的なコマンドライン操作を実現する製品は幾つかありますが、リソースキットをお持ちの方は、 rcmd というコマンドを使うことで遠隔のマシンのコマンドラインを自由に使うことができます。

rcmd コマンドは実行すれば遠隔のマシンに接続できますが、接続される側のマシンでもあらかじめ rcmdsvc というサービスをインストールして起動しておく必要があります。 インストール方法は付属のドキュメントにも書いてありますが、図XXのようにすることでインストールを行なえます (リブートの必要はありません) 。 認証は Windows NT のセキュリティが使われますので、権限があるマシンであれば図XXのように rcmd コマンドを実行するだけで接続できます。 また図XXのように, rcmd コマンドの引数として、実行したいコマンドを直接指定すれば UNIX の rsh コマンドのように使うことも可能です。 ただし、 UNIX の telnet や rsh コマンドとの互換性はありませんので注意してください。 実は telnet サーバのソフトはリソースキットにも付属しているのですが、ちょっと不安定です。 Windows NT から接続するのであれば、敢えて telnet で接続する必要もないと思いますので rcmd コマンドの使用をお勧めします。 UNIX から接続したいなど、どうしても telnet で接続したい場合は、リモートコンソールパック(http://www.oki.co.jp/OKI/Cng/Softnew/JIS/rc.htm) などの市販製品を利用するのがよいでしょう。 なお先日発売されたマイクロソフト社の Windows NT Services for UNIX Add-on Pack (http://www.microsoft.com/japan/products/ntserver/sfu/) にも telnet サーバ機能が付属しています。 マイクロソフト製品ということで安心感はあります。 また rcmd コマンドと同様の機能を持つツールとして、リソースキットには remote コマンドというツールも存在します。 興味のある方は, 試してみてください。

コマンドラインの限界

rcmd コマンドを使えば、 Win32 のコンソールプログラム(MS-DOS や POSIX のコンソールプログラムは不可) を自由に実行することができますので、遠隔のマシンの管理効率はそれなりに高まると思います。 しかし Windows NT が GUI 指向の OS であるため、コマンドラインでできることには自ずと限界があります。 例えば本来コントロールパネルから行なうネットワークの設定変更などは、そもそもコマンドが用意されていないため rcmd コマンドを使ってもどうしようもありません。

レジストリを直接編集する

上で述べたネットワークの設定など, Windows NT の設定の大半はレジストリに格納されています。 rededit や rededt32 コマンドを使えば対話的に遠隔のマシンのレジストリも修正できますし、あらかじめ修正すべき内容を記述した REG ファイルを作成した上で、コマンドラインから regedit コマンドの引数として実行すればバッチ的にレジストリの修正が行なえますので、 at コマンドや rcmd コマンドから実行することも可能です。 これらの方法で適切なレジストリを変更した上で、リソースキットに付属の netsvc コマンドや shutdown コマンドを使うなどして遠隔から該当するサービスやマシンの再起動を行なうことで、 Windows NT の設定をバッチ的もしくは対話的に変更することは可能です。 しかしレジストリを直接修正することになるので、修正を間違えると Windows NT が起動しなくなる事態も考えられます。 何をどう修正すべきかをあらかじめ知っていないといけませんので、気軽に使うにも難があります。 またドメインの設定などレジストリの設定が公開されていない箇所もありますので、万能ともいえません。

市販の遠隔操作ツールを使う

Windows NT のすべての設定を遠隔から制御したい場合はやはり遠隔操作ツールを導入するしかないでしょう。 代表的な製品としては pcANYWHERE32 (http://www.symantec.com/region/jp/products/pca80/pca80.html/) などがあげられますが、その他にも同種の製品は多数存在します。 マイクロソフト社の製品では Systems Management Server (SMS) (http://www.microsoft.com/japan/sms/default.htm)がこの機能を内包しているのですが、機能が多くて扱いも難しいことから、遠隔操作の機能だけが必要な場合はちょっと導入をためらってしまいます。 これらの製品は、遠隔の Windows NT の画面を手元のコンソールに表示し、その上でのマウス操作などを実現していますので、機能的には遠隔のマシンのコンソールと全く同じ操作性を実現できます。 しかしこうした製品の機能は、 Windows NT の API 処理を無理矢理奪い取って実現しているものですので、ディスプレイドライバとの相性によってはマシンが非常に不安定になるという致命的な欠点があります。 Windows NT 4.0 では高速化のため GUI 処理がカーネルに組み込まれたため、不具合が発生すると OS 自体が停止してしまうことが大半です。 このため、基幹システムなどにこういった製品を導入することが難しくなっています。 またこうした製品は, 何らかの方法で画面イメージを転送していますので、製品によって差があるものの、ネットワークに負荷がかかることも避けられません。 1ライセンスあたり平均1万円強の費用もかかります。

適材適所の方式を

ここまで遠隔の Windows NT を操作する方法を幾つか説明してきましたが、どの方式にも一長一短があることがご理解頂けたと思います。 また、安易に製品を購入せずとも、 Windows NT 付属のコマンドやリソースキットのコマンドだけでも、コマンドラインでの操作についてはかなりのところまで実現できることもご理解頂けたと思います。 またここで記述した以外にも筆者の思いもよらない工夫をなさっている方もいらっしゃると思います。 結局、一番必要なことは適材適所の方式を使うことと、何か解決策がないかと考える、日々の創意工夫ではないでしょうか。 思いもよらない所に解決の糸口が見つかることも多々あるものです。

注記・補足

  1. Windows 2000 Server 以降では、多くの機能がコマンドラインから実行できるようになっています。また、telnet サーバも標準で導入されています。
  2. Windows 2000 Server 以降では、「リモート管理モード」で Terminal Service を導入することによって、標準機能を使ったリモートからの GUI 呼出が可能です。
  3. 本文書は、日経 Windows NT 1999 年 7 月号の「トラブル解決 Q&A コーナー」に掲載された「リモートのNTマシン上でコマンドを実行する」の草稿を筆者の方で HTML 化して掲載しているものです。


Copyright (C) 1998-2009 TAKAHASHI, Motonobu
Last update: 2002-09-20 11:11:37 JST
webmaster@monyo.com