QNAPのNASの電源をネットワークからオフにする方法(その2)
以前の記事で、SSH を使ってNASの電源をオフにする方法を紹介したが、電源をオフにするにはログインした後パスワードを入力してシャットダウンのコマンドを入力しないといけないので手間がかかる。なので、これらを自動化する方法を検討した。
ググってみると、expectを使ったシェルスクリプトを使えばうまくできそう。expectは人がキーを叩いて返答する対話を自動化するコマンドで、自動でSSHのログインとかもできるらしい。そこで、SSH にログインして電源オフにするコマンドを発行するシェルスクリプトを書いてみた。
目次
準備
- NASのIPアドレス(例:192.168.0.100)
- 管理者のユーザー名、パスワード(例:admin、パスワード)
手順
以下のシェルスクリプトを書く。
#!/bin/bash expect -c " spawn ssh [email protected] expect \"s password:\" send \"パスワード\n\" expect \"~]\" send \"poweroff\n\" expect \"~]\" send \"exit\n\" expect \"~]\" "
コードの詳細は下の参考リンク先を見てもらった方が分かると思うが、要は コマンドを発行して(spawnの部分)、こちらが想定した返答(expectの部分、パスワード入力要求)に対して、さらに入力を返す(sendの部分、パスワードを入力)という処理をシェルスクリプトで自動的にできるようにするもの。取りあえず、デスクトップに保存。(ファイル名はshutdown_nas.command)
Macの場合、書いたシェルスクリプトを実行するにはパーミッションを変更して実行権限を与える必要があるので、ターミナルを起動して以下のコマンドを実行する。
chmod +x ~/Desktop/shutdown_nas.command
(シェルスクリプトファイルがデスクトップにある場合)
chmodでパーミッションを変更した後、デスクトップに作ったshutdown_nas.commandファイルをダブルクリックする。 nasがシャットダウンされれば成功。
注意点としては、初めて SSH にログインする時にはフィンガープリントの確認があるのでその処理をしないといけない。でもその処理は最初の一回だけなので、今回はその処理を省略(笑)。少なくとも一度はターミナルからSSHでログインするでしょ笑 !
あとは、このファイルをそのまま使うもよし、書いたシェルスクリプトを実行するAutomatorを作ってもよし。