今日も運用寄りのお話。
ターミナルサービスなどでリモートデスクトップを使ってサーバーに接続してアプリケーションを利用している。
ある時、夜間にサーバーのメンテナンスがあるので、利用者をサーバーに接続させたくない。または毎晩決まった時間にバックアップを取得するなど夜間の作業があるため接続させたくない、そんなシーンを想定して設定をしてみます。
作業内容
タスクマネージャーでコマンドを実行しRDPの接続を無効にする。
コマンドファイルの準備
今日使うコマンドはchange logon コマンドです。
タスクスケジューラに仕掛けるコマンドファイルを用意します。
まずはテキストエディタを開いて
change logon /disable
echo y | logoff rdp-tcp
と2行を入力して「logoff.cmd」(コマンドファイル)として保存します。
ちなみに2行目はコマンド実行時ににRDPで接続しているユーザーがいたらこちらからログオフさせるように書いています。ここでのECHO表示は実行されたかどうか見るためで、実際にやるときは必ずしも実行されたウィンドウを表示する必要はないかも。
.cmdファイルで保存します。
拡張子.cmdで保存するとコマンドファイルが出来上がります。
上のコマンドでdisable状態にすると接続できなくなるので指定の時間で元に戻るよう接続できるようにするコマンドも用意します。
change logon /enable
ここでは「logon.cmd」と保存します。
実行される時間に利用している人ががいるかもしれないのでコマンドが実行される5分前くらいにメッセージを出してみます。
msg * 夜間更新処理を行います。接続を終了してください。
これを「logoffmsg.cmd」で保存します。
タスクスケジューラの設定
まず、設定するサーバーに管理者でコンソールまたはリモートデスクトップで接続します。次に、上で作成したコマンドファイルをC:¥にコピーします。
(今回はCドライブ直下で行ってしまいます。細かいこと言うとアクセス権とか色々ありますが今回は考えません)
タスクスケジューラの起動
タスクスケジューラを起動します。
タスクの作成をクリックして設定します。
全般タブの設定
名前を仮に「夜間接続拒否」とします。
セキュリティオプションを「ユーザーがログオンしているかどうかにかかわらず実行する」にチェックします。
タスク実行に使うユーザーアカウントが管理者になっていることを確認します。
トリガタブの設定
接続拒否したい時間を設定します。
例えば毎日0:00に接続できないようにする場合は「毎日」にチェックして日時(今表示されている次の日)を入力します。
操作タブの設定
上で作成したコマンドファイルのパスを入力します。次の画像はlogoffコマンドを設定しているところです。
change logonコマンドの実行
実際にタスクが動いてchange logon /disableが実行されると下の画像のように「リモートログオンは現在無効です。」と表示されリモート接続できなくなりました。
このままだと困るので「change logon /enable」を実行して接続できるように戻します。
無事接続できるようになりました。
具体的な設定例としてまとめると
ログオフしたい時間の5分前に「logoffmsg.cmd」
接続しているユーザーをログオフさせて、以降接続させない時間に「logoff.cmd」
作業完了後、以降接続していい時間に「logon.cmd」
以上3つのタスクスケジュールを設定します。
ちなみにこの作業、CitrixのXenAppやXenDesktopの環境でも応用すること(コマンドを多少いじるだけ)で使う事ができます。
change logon /disable
echo y | logoff ica-tcp
rdpをicaに編集するだけ。簡単ですね。
最後に注意点として、無効化した後はlogon状態をenableに戻すのを忘れないようにしてください。接続できませんので;
また、この設定は、設定した管理者ですらリモート接続はできなくなります。設定を間違えると治すのに一手間必要です。遠隔地にある場合は抜け道を用意しておかないといけません。なのでまずはコンソールで触れる環境で試すことをお勧めしめします。
抜け道の設定例はついてはまたの機会にまとめようと思います。
また、あくまでも個人的な検証なので日々の運用で、と考えられる場合は自己責任で確実な検証の元、試してみてください。