YUUlog

ゲーム・IT・ガジェット

スポンサーリンク

GoogleHome で PCを起動( IFTTT / Webhook / Wake-on-LAN)

最初にまとめ

f:id:YUU8o:20190406180828p:plain

概要図

 

・「OK Google システム起動」と話せばPCの電源が入るようにした。

・IFTTTでGoogle Assistantをトリガーに Webhookで自宅のサーバーにHTTPリクエストを送信、外部コマンドの実行でehter-wakeコマンドを実行してPCの電源を入れている。

・セキュリティがガバいので検討が必要

IFTTTのレシピ

使っているのは Google Assistantの「Say a simple pharase」と Webhookの「Make a Web request」です。Webhookのリクエスト先はパブリックにさらされることになるのですが、とりあえずのセキュリティ対策として、オレオレ証明書でhttps化、ポートの変更、POSTでトークンを送ってチェックをするようにしています。

f:id:YUU8o:20190406181713p:plain

IFTTTのレシピ

受け側のコード

<?php
$request = $_POST['token'];
$cmd = 'sudo ether-wake 11:22:33:44:55:66';
if(strcmp($request,"tokenword") == 0){
   $output =  shell_exec($cmd);
}
else{
   http_response_code(404);
}
?>

POSTで送られてくるtokenをチェックして予め指定したコマンド(ether-wake)を実行するだけですね。tokenが違う場合は404を返すようにしています。実行コマンドを引数で受け取るようなこともできそうですが、変なことできないように静的に書いておくほうが良いかなと思いここに記述しています。

 

ハマったところと課題

今回受け側はCentOS上に組んだのですが主にLinuxのセキュリティ周りの理解が足りずに苦戦した部分が多かったです。

1.httpdの実行ユーザーのsudo設定

今回利用している ether-wakeの実行にsudoが必要なのですが、phpのexec関数からキックするために visudoでapacheユーザーのether-wakeをパスワードなしで実行できるように設定が必要でした。

apache  ALL=(ALL) NOPASSWD: /sbin/ether-wake

 

2.SELinuxって何それ?

こっちのほうは課題ですね。アクセス制御の仕組みらしく、監査ログでsudoを止めに入っていそうというところまでは分かったのですが、とりあえず動かしたい衝動に駆られオフにしてしまいました。。勉強して使いこなせるようにしようと思います。

 

最後にまとめ

GoogleHome+IFTTTは面白いですね。言葉をキーに何かが動くって本当魔法みたいだなーと。