sshごしにgoogle-drive-ocamlfuseのOAuth認証を行う方法
はじめに
ファイルサーバにGoogle Driveをマウントして、重要なファイルをバックアップする仕組みを作ろうとしています。
Google Driveのマウントにはgoogle-drive-ocamlfuseを使うことにしたのですが、このソフトはアカウント認証(OAuth)の際にGUIなブラウザを要求してきます。
うちのファイルサーバにはXが無いのでブラウザは表示不可です。
X転送するにしても認証のためだけにブラウザ(と大量のX関係の依存ライブラリ)をインストールするのは超イマイチ。
google-drive-ocamlfuseはヘッドレスモードが想定されていますが、新たにGoogle Appの登録をしないといけない?などで面倒っぽいです。
(ドキュメントにも「ピンチの時だけ使え」って書いてますし。)
などなどの制約を鑑みて、今回はちょっとしたハックでこの状況を切り抜けることにしました。
手順
設定者はMacやWindowsからsshを用いてファイルサーバにログインしている想定です。
カレントディレクトリにfirefoxという名前のシェルスクリプトを作る。
google-drive-ocamlfuseはOAuth認証を行う際に、ブラウザとしてxdg-open、firefox、google-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で動くブラウザのアドレスバーに先ほどのアドレスを貼り付けて認証を行います。
認証後にこの画面に遷移したらOKです。
1分ほど待ってgoogle-drive-ocamlfuseを起動した端末に下記のメッセージが表示されればOAuth認証は成功です。
Access token retrieved correctly.
原理
(カミングスーン)