もぐてっく

人は1つ歳をとるたび、1ビットづつ大きくなれると信じてた。

sshごしにgoogle-drive-ocamlfuseのOAuth認証を行う方法

はじめに

ファイルサーバにGoogle Driveをマウントして、重要なファイルをバックアップする仕組みを作ろうとしています。

Google Driveのマウントにはgoogle-drive-ocamlfuseを使うことにしたのですが、このソフトはアカウント認証(OAuth)の際にGUIなブラウザを要求してきます。

うちのファイルサーバにはXが無いのでブラウザは表示不可です。
X転送するにしても認証のためだけにブラウザ(と大量のX関係の依存ライブラリ)をインストールするのは超イマイチ。

google-drive-ocamlfuseはヘッドレスモードが想定されていますが、新たにGoogle Appの登録をしないといけない?などで面倒っぽいです。
(ドキュメントにも「ピンチの時だけ使え」って書いてますし。)

などなどの制約を鑑みて、今回はちょっとしたハックでこの状況を切り抜けることにしました。

手順

設定者はMacWindowsからsshを用いてファイルサーバにログインしている想定です。

カレントディレクトリにfirefoxという名前のシェルスクリプトを作る。

google-drive-ocamlfuseはOAuth認証を行う際に、ブラウザとしてxdg-open、firefoxgoogle-chromeの順に実行ファイルを探します。

つまり、これらと同名のシェルスクリプトを用意すれば、google-drive-ocamlfuseのOAuthの認証シーケンスに介入することが出来ます。

今回は"firefox"と言うシェルスクリプトを作って、まんまとgoogle-drive-ocamlfuseを化かしてやろうと思います。

./firefox

#! /bin/sh

echo $* > /dev/stderr

このスクリプトが呼ばれる際、stdoutはどっかにリダイレクトされてて端末にメッセージが出せないので、stderrに出力する様にします。
パーミッションを付けるのをお忘れなく。

chmod 777 firefox

OAuth認証を行う。

さっき作った偽firefoxのいるディレクトリにパスを通しつつ、google-drive-ocamlfuseを起動してOAuth認証を開始します。

firefoxのおかげで、ブラウザが呼び出されるタイミングでhttps://accounts.google.comで始まる URLが表示されるはずです。

$ PATH=`pwd`:$PATH google-drive-ocamlfuse
/bin/sh: 1: xdg-open: not found
https://accounts.google.com/o/oauth2/auth?client_id=564921029129.apps.googleusercontent.com&redirect_uri=https%3A%2F%2Fgd-ocaml-auth.appspot.com%2Foauth2callback&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive&response_type=code&access_type=offline&approval_prompt=force&state=ystNgUZ5iSKxd%2FlP7WQ4jolWLy5QbZyrTXXXXXXXX

この端末は閉じないでこのまま置いといてください。

手元のブラウザで認証を行う。

お手元の超リッチなクライアントPCで動くブラウザのアドレスバーに先ほどのアドレスを貼り付けて認証を行います。

f:id:moguno:20160324004444p:plain

認証後にこの画面に遷移したらOKです。

f:id:moguno:20160324004505p:plain

1分ほど待ってgoogle-drive-ocamlfuseを起動した端末に下記のメッセージが表示されればOAuth認証は成功です。

Access token retrieved correctly.

原理

(カミングスーン)