ESXiをSSH経由でシャットダウンする方法メモ

諸説あったり、微妙にそれぞれふるまいが違ったので実際に試してみたメモです。
これ以降は試行錯誤の記録なので、結論だけ先に書いておくと、以下コマンドでOKでした。

# poweroff

やりたかったこと

停電の際、キレイに復旧できる仕組みをつくる

  1. 電源喪失
  2. UPS付属ツールからなにかしらの仕組みでESXiをキック
  3. ESXi上の仮想マシンをシャットダウン
  4. ESXiハイパーバイザをシャットダウン
  5. 電源復活
  6. ESXi起動
  7. 仮想マシンも起動

今回、仮想マシンとハイパーバイザをシャットダウンするコマンドを調べました。

esxcliでシャットダウン

メンテナンスモードに切り替えてシャットダウンします。
が、メンテナンスモードに切り替えるには事前に仮想マシンをすべてシャットダウンする必要あり。
しかも、次回起動時にはメンテナンスモードのままなので仮想マシンは自動で起動しません。

# esxcli system maintenanceMode get
# esxcli system maintenanceMode set --timeout 0 --enable yes
# esxcli system maintenanceMode get
# esxcli system shutdown poweroff -r PowerFailed

参考:http://qiita.com/takech9203/items/87988afe0f5f8bfefea5

shutdown.sh

シャットダウンスクリプトです。
ハイパーバイザに関連するサービスはシャットダウンされましたが、仮想マシンはシャットダウンされず。
haltでVMは強制シャットダウンされてしまいました。。。

# /sbin/shutdown.sh && halt
poweroff

仮想マシンがシャットダウンされ、そのあと電源が切れました。
これでOK!

poweroff

参考:https://kb.vmware.com/selfservice/search.do?cmd=displayKC&docType=kc&docTypeID=DT_KB_1_1&externalId=2053214

SSHをきっかけにコマンドを実行する

VMware vSphere ClientからSSHを常時有効にします。
あとはUPS付属ツールを実行するマシンで、パスワードなしのSSHの公開鍵・秘密鍵を作成し、
公開鍵の値をESXiのauthorized_keysに追記します。
※今回は上記の鍵とは別に通常の操作用の公開鍵の値も追記しました。

# vi /etc/ssh/keys-root/authorized_keys
ssh-rsa ***
from="192.168.0.xx",command="poweroff" ssh-rsa ****

重要なのはauthorized_keysの2行目。
fromとcommandを追加することで特定IPからのSSH接続で指定されたコマンドが実行されます。
誤ってSSHで接続するとVM全部落ちるという危なっかしい仕組みですが、あくまで自宅サーバですので許されるハズw


最後に/etc/ssh/sshd_confgにパスワードログインを禁止する設定を追記して完了です。

# vi /etc/ssh/sshd_config
ChallengeResponseAuthentication no

# /etc/init.d/SSH restart
SSH login disabled
SSH login enabled


ということで、特定サーバからSSHでつなぐとESXiがキレイに電源が切れる仕組みができました。