概要
UPSからシャットダウンの通知を受けてから、
Ubuntuをシャットダウンさせるスクリプトを動作させるためにしたこと。
(Windows、CentOSはUPS付属のツールでシャットダウンできるため省略)
SSHの認証方法
Ubuntuにはすでにパスワードによる認証でSSH接続できるように設定済みであった。
プロンプトなしでSSH経由のアクセスが必要なために、公開鍵と秘密鍵を使用した認証に変更する。
公開鍵と秘密鍵の作成
プロンプトを表示させないためパスフレーズは入力せずに作成する。(SSHでリモートホストに接続する前にやっておくと便利なことは? ssh-keygenコマンド)
$ ssh-keygen -t rsa
~/.ssh/id-rsa.pub
に公開鍵が作成される。
SSHサーバに公開鍵を登録
公開鍵をUbuntuにコピーする。
$ scp ~/.ssh/id-rsa.pub remoteuser@192.168.XXX.XXX:/home/.ssh/authorized_keys
注意:上記SSHサーバはauthorized_keysが存在しなかったため、公開鍵ファイルを直接、authorized_keysとしている。すでに存在している場合は、一旦別名で保存し、catコマンドなどで追加すること。
パスワード不要でシャットダウンできるように設定
プロンプトなしでSSH接続できるようになっても、shutdownコマンド実行時にroot権限が必要になるため、このままではプロンプトでパスワードを問われてしまう。
/etc/sudoers編集
shutdownコマンドのみパスワード不要で実行できるようにsudoersを編集する。
sudoersの編集にはvisudoコマンドを使用する。
(Ubuntu Forums Thread: Sending single command via SSH for shutdown)
$ ssh remoteuser@192.168.XXX.XXX #=> シャットダウン対象のUbuntuにログイン
$ sudo visudo
以下の行を追加
remoteuser ALL=NOPASSWD: /sbin/shutdown
$ exit #=> シャットダウン対象のUbuntuからログアウト
シャットダウンスクリプトの作成
#!/bin/bash
ssh remoteuser@192.168.XXX.XXX "sudo shutdown -P now"
上記ファイルに実行権限を設定する。
$ chmod 764 shutdown_script.sh
UPSの通知を受けて実行するスクリプトとして、上記ファイルを指定する。