Windows Serverで動くサービスを外部から止めたり、動かしたりしたい。
そういう必要に迫られたことがありましたので、こちらに残しておきます。
そういう必要に迫られたことがありましたので、こちらに残しておきます。
どうやるか?
「外部から」はLinuxサーバを使います。AWSでやってますので、Amazon Linuxを使います。LinuxサーバからWindows Serverで動くサービスに何かするには、MS-RPC(Microsoft Remote Procedure Call)を使えばできそうと分かりました。(以下、RPCと記述します)
LinuxサーバでRPCを使うためにはsambaを導入すればできるようです。
sambaの導入
Amazon Linuxにsambaを導入するにはyum一発で済むかと思いきやうまくいきません。下記のようにやります。
# cd /etc/yum.repos.d/ # wget http://ftp.sernet.de/pub/samba/3.5/centos/6/sernet-samba.repo # yum install sambasamba自身の設定やサービスを動かしておく必要はありません。
一緒に導入されるコマンドを使います。 コマンドを実行する前にSecurity Groupもしくはファイアウォールを通すように設定します。
使うポートは下記のようです。 TCP 135,137,139,445
UDP 137,138,445,あと動的にRPCの待受するポート 今回は、対象のWindows ServerとWindows Serverに何かするLinuxサーバはVPCの同一Subnetにあり、また、検証ということで、ローカルに対して気軽に開けています。
セキュリティを配慮してこの設定は慎重に行なってください。
「動的に」が困る場合は、レジストリをいじることで動的範囲を固定にできるようです。
Windows サービスを止めたり動かしたり
netコマンドを使います。# which net /usr/bin/netnetコマンドのうち、サービスに関するコマンドを抜き出してみます。
# net rpc service Invalid command: net rpc service Usage: net rpc service list View configured Win32 services net rpc service start Start a service net rpc service stop Stop a service net rpc service pause Pause a service net rpc service resume Resume a paused service net rpc service status View current status of a service net rpc service delete Delete a service net rpc service create Create a service対象のWindows Serverに登録されているサービスをリストアップしてみます。
# net rpc service list -I 10.100.40.36 -U Administrator ←対象のWindows Server 10.100.40.36 に サービス一覧 を Administrator で実行します Enter Administrator's password: ←Administrator のパスワードを入力します AeLookupSvc "Application Experience" ALG "Application Layer Gateway Service" AppIDSvc "Application Identity" : : (中略) : : Tomcat7 "Apache Tomcat 7.0 Tomcat7" postgresql-x64-9.0 "postgresql-x64-9.0"試しにTomcatのサービスの稼動状態を見てみます。
# net rpc service status Tomcat7 -I 10.100.40.36 -U Administrator%XXXXXX ←Administratorの後に「%」をつけてパスワードをつけるとパスワードを訊かれずに実行できます Tomcat7 service is running. Configuration details: Controls Accepted = 0x1 Service Type = 0x10 Start Type = 0x2 Error Control = 0x1 Tag ID = 0x0 Executable Path = "C:Program FilesApache Software FoundationTomcat 7.0binTomcat7.exe" //RS//Tomcat7 Load Order Group = Dependencies = Tcpip/Afd/ Start Name = LocalSystem Display Name = Apache Tomcat 7.0 Tomcat7稼働してますので「running」と表示されます。 このTomcatを停止させてみます。
# net rpc service stop Tomcat7 -I 10.100.40.36 -U Administrator%XXXXXX .............................. Tomcat7 service is Unknown State [0].停止できたか確認します。
# net rpc service status Tomcat7 -I 10.100.40.36 -U Administrator%%XXXXXX Tomcat7 service is stopped. Configuration details: Controls Accepted = 0x0 Service Type = 0x10 Start Type = 0x2 Error Control = 0x1 Tag ID = 0x0 Executable Path = "C:Program FilesApache Software FoundationTomcat 7.0binTomcat7.exe" //RS//Tomcat7 Load Order Group = Dependencies = Tcpip/Afd/ Start Name = LocalSystem Display Name = Apache Tomcat 7.0 Tomcat7「stopped」と表示されて止まっているようです。 停止させたTomcatを稼働させます。
# net rpc service start Tomcat7 -I 10.100.40.36 -U Administrator%%XXXXXX .............................. Failed to start service: Tomcat7 [WERR_OK]Tomcatが稼働したか確認します。
# net rpc service status Tomcat7 -I 10.100.40.36 -U Administrator%XXXXXX Tomcat7 service is running. Configuration details: Controls Accepted = 0x1 Service Type = 0x10 Start Type = 0x2 Error Control = 0x1 Tag ID = 0x0 Executable Path = "C:Program FilesApache Software FoundationTomcat 7.0binTomcat7.exe" //RS//Tomcat7 Load Order Group = Dependencies = Tcpip/Afd/ Start Name = LocalSystem Display Name = Apache Tomcat 7.0 Tomcat7「running」と表示されてますので稼働しているようです。
「net rpc service」以外のnet rpc コマンド
「net rpc service」以外にもコマンドはあります。# net help rpc Usage: net rpc audit Modify global audit settings net rpc info Show basic info about a domain net rpc join Join a domain net rpc oldjoin Join a domain created in server manager net rpc testjoin Test that a join is valid net rpc user List/modify users net rpc password Change a user password Alias for net rpc user password net rpc group List/modify groups net rpc share List/modify shares net rpc file List open files net rpc printer List/modify printers net rpc changetrustpw Change trust account password net rpc trustdom Modify domain trusts net rpc abortshutdown Abort a remote shutdown net rpc shutdown Shutdown a remote server net rpc samdump Dump SAM data of remote NT PDC net rpc vampire Sync a remote NT PDC's data into local passdb net rpc getsid Fetch the domain sid into local secrets.tdb net rpc rights Manage privileges assigned to SID net rpc service Start/stop/query remote services net rpc registry Manage registry hives net rpc shell Open interactive shell on remote serverメジャーなところでは「net rpc shutdown」でしょうか。
いろいろできそうです。
まとめ
- LinuxからWindowsサービスを止めたり動かしたりでき便利
- セキュリティ面では気をつける必要あり
- 比較的手間がかからない