ssh経由でgrowlnotify実行
LinuxサーバからMacクライアントのGrowlに通知を出したい
MacBookAir買いました。MacといえばなんとなくGrowlということでなんでもかんでもGrowlで通知したい!Growlと連携するには基本的にはAppleScriptとかいうのを使うらしいのですが全く分かりません…しかし!コマンドラインなどから通知する機能として「growlnotify」というコマンドが用意されています。やったね!このコマンドをサーバ側から実行すればなんとかなりそう…
サーバ側からコマンドを実行するには
サーバからMacBookAirにssh接続してgrowlnotifyコマンドを実行する方法でやろうと思います。
なんか逆な気もするけど…
MacBookAirのsshd有効化
・GUIのシステム環境設定の「共有」にてリモートログインを有効に
・パスワードログイン有効化(/etc/sshd_config に「PasswordAuthentication yes」と記述)
ssh経由でコマンド実行
基本的には「ssh user@host command」を実行してその後パスワードを打てばリモート接続先でコマンドを実行することが出来ます。
user=hoge
host=192.168.0.2
command=/usr/local/bin/growlnotify test -m "こんにちは" -a test
ならば
ssh hoge@192.168.0.2 "/usr/local/bin/growlnotify test -m \"こんにちは\" -a test"
となります。エスケープを忘れずに!
ただ、これだと毎回パスワードを打つ必要があります(sshdでパスワードを必要としない設定にすればまあOKですが…)。メンドクセ
ログインを自動化する
いろいろ調べてみるとUNIXコマンドの「expect」を使うといけるっぽいです。パスワードがhogehogeの時の具体的なシェルスクリプトは以下のとおりです。
#!/usr/bin/expect set timeout 10 spawn ssh hoge@192.168.0.2 "/usr/local/bin/growlnotify test -m \"こんにちは\" -a test" expect "Password:" send "hogehoge\n" interact
「expect "Password:"」のところは環境によって変わるかもです。「expect "assword"」とかにしたほうが汎用性があるかも…
でこのスクリプトを動かせば一応Growl通知は出たのですが必ず成功するわけではなく結構失敗します…
原因不明!これじゃなかなか使いづらいな
終わりに
今回はやや不満が残る結果に終わってしまいましたがexpectとか今まで知らなかったので勉強にはなりました。めでたしめでたし