リモートシャットダウンするスクリプトを動作させるための設定

  • 2
    Like
  • 0
    Comment
More than 1 year has passed since last update.

概要

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の通知を受けて実行するスクリプトとして、上記ファイルを指定する。