リモートでLinuxサーバからWindows XPをシャットダウンする方法
TL;DR
RHEL (例: RHEL5) 上の Samba を使い、net rpc SHUTDOWN コマンドで Windows XP SP3 クライアントをリモートで安全にシャットダウンする手順、要件、スクリプト例をまとめました。事前に Windows 側のファイル共有設定、ファイアウォール、管理者権限、Linux 側の Samba/WINS/DNS 設定を整えることが最重要です。
概要
学校や小規模ネットワークで夜間に電力を節約するため、Linux サーバから Windows XP クライアント(VM をホストする物理マシン含む)を一括シャットダウンする実践的な手順です。この記事は実際に Dell PowerEdge / OptiPlex と RHEL5 + Samba 環境で動作した手順を基にしています。主に Samba の net rpc コマンドを使う方法を説明します。
重要: Windows XP はサポート終了 OS です。ネットワーク経由で特権操作を行う場合はセキュリティリスクを必ず評価してください。
事前に押さえるポイント
- net rpc コマンドは Samba の RPC インターフェイスを経由してリモートの Windows に shutdown を発行します。Samba が正しく設定され、ネットワーク経路が確立されていることが前提です。
- 標準的な制約: Windows 側は管理者グループのユーザにリモートシャットダウン権限を与えています。必要に応じてローカルポリシーを変更してください。
Windows XP をリモートでシャットダウンするための要件
- 重要: 「簡易ファイル共有」を無効にする。マイ コンピュータ > ツール > フォルダ オプション > 表示 の「簡易ファイル共有を使用する」のチェックを外す。
- Windows ファイアウォールで ICMP とファイルとプリンターの共有を許可する。コントロールパネル > セキュリティ センター > Windows ファイアウォール > 例外 で「ファイルとプリンターの共有」にチェック。詳細タブ > ICMP 設定 で「受信エコー要求を許可」にチェック。
- リモートの Windows XP の IP アドレスに対して ping が成功すること(ICMP を許可していない場合は確認手順を別に用意)。
- リモートシャットダウンを許可するユーザはローカル ポリシーで制御される。グループポリシーエディタ (gpedit.msc) にて Computer Configuration > Windows Settings > Security > Local Policies > User Rights Assignment > Force shutdown from a remote system を編集し、該当ユーザ/グループを追加する。
Linux サーバ側の要件
- Samba がインストールされ、正しく動作していること。RHEL5 の Samba を WINS サーバとして動かす構成は動作確認済みです。
- DHCP サーバで Windows クライアントに固定 IP を払い出す(固定割当)ことを推奨。管理が容易になります。
- BIND 等でサブネット用のゾーンを用意し、適切に DNS 名解決できると運用が楽です。
- リモートシャットダウン用のコマンド(例):
net rpc SHUTDOWN -C "enter a comment to display at shutdown" -f -I x.x.x.x -U username%password
- x.x.x.x は対象の Windows XP の IP アドレス。
- username は対象マシンの Administrator グループのメンバー。
- password はそのユーザのパスワード。
- -C はシャットダウン画面に表示するコメント、-f は強制的にプロセスを終了します。
- Samba はコマンド実行時に問題の原因を比較的詳細に返すので、まずは手動でコマンドを投げて動作確認してください。
- 動作確認が取れたら、シャットダウン処理をスクリプト化して crontab でスケジュールします。
簡単なシャットダウンスクリプト例
以下は /usr/local/sbin/shutdown-xp.sh の例です。ファイルのパーミッションは root のみ実行可能にして運用してください。
#!/bin/bash
# shutdown-xp.sh
# IP一覧ファイル: /etc/lab-xp-ips.txt (行ごとにIPかホスト名)
COMMENT="夜間の電源節約のためシャットダウンします"
CREDENTIALS="admin%yourpassword"
for HOST in $(cat /etc/lab-xp-ips.txt); do
echo "Shutting down $HOST"
net rpc SHUTDOWN -C "$COMMENT" -f -I $HOST -U $CREDENTIALS
sleep 1
done
crontab の例(毎晩 22:30 に実行):
30 22 * * * /usr/local/sbin/shutdown-xp.sh >> /var/log/lab-shutdown.log 2>&1
注意: パスワードをスクリプトに平文で置かないこと。可能であれば管理アカウントの限定使用や、Samba の認証方法を検討してください。
テスト手順(推奨)
- 単一ホストに対して net rpc SHUTDOWN を手動で実行し、Samba の出力を確認する。
- ログ (/var/log/samba/ または crontab の出力ログ) を監視して、失敗したホストとエラー内容を特定する。
- 失敗時はネットワーク(ping, netstat)、Windows 側のファイアウォール設定、ユーザ権限を順に確認する。
代替アプローチと比較
- Wake-on-LAN + BIOS/スケジュール: シャットダウン後にリモートで起動する必要があれば WOL を組み合わせるのが有効。
- SSH/PSExec/WinRM: XP は近代的な WinRM/PowerShell リモート操作をサポートしていない。PSExec(Sysinternals)を使う手もあるが、SSH を入れるのは追加構成が必要。
- 管理ツール: PDQ Deploy や商用のリモート管理ツールは GUI 操作や詳細なレポートが欲しい場合に検討。
いつこの方法が失敗するか(例外ケース)
- Windows ファイアウォールやネットワーク機器により SMB/RPC トラフィックがブロックされている場合。
- Windows 側で管理者権限が不適切に設定されている場合。
- XP マシンがサスペンドやハイバネーション中でネットワーク応答が無い場合(Samba 経由のシャットダウンは動作しない)。
セキュリティと運用上の注意
- 認証情報の管理: スクリプト内に平文のパスワードを置くことはリスクです。アクセス制限されたストレージや Vault (例: HashiCorp Vault) の利用を検討してください。
- ログ監査: シャットダウン実行ログを保存し、異常が発生したときのトラブルシュートに活用してください。
- 最小権限: シャットダウン専用の限定的な管理アカウントを用意し、他の権限を与えないようにします。
運用向けチェックリスト(役割別)
- ネットワーク管理者:
- DHCP 固定割当の設定
- DNS / WINS の設定と名前解決の確認
- ファイアウォールで必要なポートを開放
- Windows 管理者:
- 簡易ファイル共有を無効化
- ファイルとプリンター共有、ICMP を許可
- ローカルポリシーでリモートシャットダウン権を確認
- Linux/サーバ管理者:
- Samba の動作確認
- シャットダウンスクリプトの配置と権限設定
- crontab やログローテーション設定
ミニ手法(チェック順)
- ping で到達確認
- smbclient -L で Samba 接続の検証
- net rpc SHUTDOWN を単体で試す
- スクリプト化して少数台で実行
- 全台を crontab で運用
トラブルシュートの短いガイド
- エラー: “NT_STATUS_ACCESS_DENIED” → 認証/権限を確認
- 接続できない → ファイアウォール、ルーティング、名前解決を確認
- 応答なし → 対象がスリープ/ハイバネーション状態か確認
よくある質問
Q: net rpc SHUTDOWN を実行するポートは何ですか?
A: 主に SMB/RPC に依存するため TCP 445、または NetBIOS 依存の場合は 139 などが関係します。ネットワーク設定次第でポートが異なるため、環境に合わせて確認してください。
Q: パスワードをスクリプトに書かずに済ませる方法はありますか?
A: 可能であれば専用の管理アカウントを作り、資格情報を安全に保管する Vault を使用するか、Samba の認証バックエンドで安全なメカニズムを検討してください。Kerberos を使える環境ならそれがより安全です。
Q: Windows XP がサポート終了していますが、運用上の代替は?
A: 可能であれば、最新のサポートされている OS にアップグレードするか、少なくともネットワーク分離と厳格なアクセス制御を実施してください。
参考リンク
http://www.lgr.ca/blog/2008/04/shutdown-windows-from-linux.html
http://landofthefreeish.com/linux/howto-remote-shutdown-of-a-windows-computer-from-linux/
http://blog.beausanders.com/?q=node/8
1行用語集
- Samba: Linux/Unix と Windows 間のファイル共有と Windows RPC を扱うオープンソース実装。
- net rpc SHUTDOWN: Samba の RPC クライアント機能を使って Windows をシャットダウンするコマンド。
まとめ
- Samba の net rpc を使えば RHEL5 等の Linux サーバから Windows XP をリモートシャットダウンできる。
- Windows 側のファイル共有設定、ファイアウォール、権限設定が事前条件。
- スクリプト化して crontab で運用するのが実務的。セキュリティと認証情報の扱いに注意して運用してください。