たまたま似たようなことをやってた人がいるようですが物凄い確率で起こった偶然です。
ChromeへSSHログインをpush通知
- ChromeでGCMを使ったPush通知が出来るらしい
- sshログインを通知したい!
っていう発想が出てきたのでそれをまとめてやってみることに…………
調べてみるとidobataに送るってのがありました。ちなみにこれならログも残るしChromeにも通知できるし既に負けてます!()
でもやっぱ面倒
~~ChromeアプリやExtensionでGCMを使おうとするとストア公開(限定公開/非公開含む)が必要らしい。つまりそれって$5払えってことだよね?~~→普通にchrome.gcm
使って試してみたらストア公開はいらなかった。
Chrome35からGCM辺りがまた変わってたりもするみたいだけどとりあえず今回はコーディングはめんどくさいので既にあるものを借りちゃいます。
これ→https://github.com/GoogleChrome/chrome-app-samples/tree/master/gcm-notifications
公式のサンプルアプリです。
ストアからインストールする。
APIの方
GCMを使えるようにする。
Google developer consoleへいく。まだアプリを作ってない場合は適当に登録してやる。
プロジェクトの画面を開くとプロジェクト番号って数字があるのでメモっとく。これがSenderIDになる。
先程のアプリに入れるところがあるのでコピペしておきますか。これでEnterするとchrome.gcm.register
されるわけですね。
続いてAPIを利用できるようにします。
Developer consoleの左のAPIと認証→APIからGoogle Cloud Messaging for Androidとfor Chrome、両方有効にする。多分どっちかだけで大丈夫だと思うけど謎が…………
初回は規約へ同意を求められます。
次に認証情報を開いて鯖からのアクセスを許可する
Create new key→サーバーキーの順にクリック。サーバーのIPアドレスを入力してやる。
シンプルな認証ですね。
APIキーが表示される。これが認証情報としてHTTPヘッダの一部になって送られる。
これも先程のアプリに入力欄があるのでコピペ
とりあえずこれだけ入れて下にcurlコマンドが表示されているはずなので、鯖にsshでアクセスしてコピペしてやる。ここまでの手順に問題がなければidが返され、デスクトップに通知が出現するはず。
ただしipv6の使える鯖でやるとそちらが優先されることがある(と言うか多分優先される)。ipv4だけしか登録してなかったら当然のごとく401が返ってくる。(それもhtmlで)。ipv6アドレスをGoogleに登録しおけばそれでいいのだが、ConoHaのような大量にipv6があるような場合、そもそもどのipアドレスが利用されるかもわからない。(わかるの?)
面倒なので-4
をつけてipv4を強制させたところ無事pushに成功した。(ここだけでしばらく悩んだ)
sshログインを通知
sshrcをつくってやり、とりあえずsshログインを通知させた。
/etc/ssh/rc.d/google_push.sh
curl -H "Content-Type:application/x-www-form-urlencoded;charset=UTF-8" -H "Authorization: key=YOUR_API_KEY" -d "registration_id=クライアント識別id" -d data.[Login]="$(id -nu) $(date +'%Y-%m-%d %H:%M:%S %Z')" https://android.googleapis.com/gcm/send -4 -o /dev/null
google_push.shにchmod +xしておく。
強引だけどとりあえずこれでChrome使ってるときにログイン通知は受け取れるようになった。
…………やっぱり実装しなおさないと…………