諸説あったり、微妙にそれぞれふるまいが違ったので実際に試してみたメモです。
これ以降は試行錯誤の記録なので、結論だけ先に書いておくと、以下コマンドでOKでした。
# poweroff
やりたかったこと
停電の際、キレイに復旧できる仕組みをつくる
今回、仮想マシンとハイパーバイザをシャットダウンするコマンドを調べました。
esxcliでシャットダウン
メンテナンスモードに切り替えてシャットダウンします。
が、メンテナンスモードに切り替えるには事前に仮想マシンをすべてシャットダウンする必要あり。
しかも、次回起動時にはメンテナンスモードのままなので仮想マシンは自動で起動しません。
# esxcli system maintenanceMode get # esxcli system maintenanceMode set --timeout 0 --enable yes # esxcli system maintenanceMode get # esxcli system shutdown poweroff -r PowerFailed
shutdown.sh
シャットダウンスクリプトです。
ハイパーバイザに関連するサービスはシャットダウンされましたが、仮想マシンはシャットダウンされず。
haltでVMは強制シャットダウンされてしまいました。。。
# /sbin/shutdown.sh && halt
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がキレイに電源が切れる仕組みができました。