2023-04-22
LinuxコンソールからGoogle Driveにアクセスするにはgoogle-drive-ocamlfuseを使うが、AWS内の仮想マシンのようにGUIブラウザと直接やりとりできないSSH接続のみでマウントする方法がググってもどこにも見つからず苦労したのでメモ。
あまたに紹介されている単純にgoogle-drive-ocamlfuseと打ってブラウザ認証を通す方法は、KDE/GNOMEなどデスクトップ環境が一体になっているLinuxのみで有効でありAWS内のリモートSSH/CUIのみのLinuxでは一切不可能である(ブラウザから戻って来れない)。
このようなリモートSSH/CUIのみの環境でGoogle環境にアクセスするには、Google Cloud Platformであらかじめ使いたいサービスのクライアントIDとクライアントシークレットを取得して、コマンドラインツール(今回はgoogle-drive-ocamlfuse)の引数にIDとシークレットを指定し、ブラウザで認証し認証コードを発行しそれを再度コマンドラインに貼り付ければ連携が可能となる。
1、google-drive-ocamlfuseのインストール
まずはAWS内仮想マシン(Debian)にCUIツールをインストールする。(これも割と苦労した)
パッケージインストール/リポジトリ追加
sudo -s apt install software-properties-common dirmngr add-apt-repository ppa:alessandro-strada/ppa
リポジトリファイル編集
cd /etc/apt/sources.list.d/ vi alessandro-strada-ubuntu-ppa-hirsute.list #deb http://ppa.launchpad.net/alessandro-strada/ppa/ubuntu hirsute main # deb-src http://ppa.launchpad.net/alessandro-strada/ppa/ubuntu hirsute main # deb-src http://ppa.launchpad.net/alessandro-strada/ppa/ubuntu hirsute main deb http://ppa.launchpad.net/alessandro-strada/ppa/ubuntu xenial main deb-src http://ppa.launchpad.net/alessandro-strada/ppa/ubuntu xenial main
既存のものをコメントアウトして最後の2行を加える。
キーの再取得
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys AD5F235DF639B041
ここまでの作業でgoogle-drive-ocamlfuseのインストール準備は整ったはず。インストールする。
apt update apt install google-drive-ocamlfuse
2、Google Cloud PlatformでGoogle Drive APIを有効にしクライアントID/クライアントシークレットを取得する
次に、普通に普段利用しているWindows PCブラウザなどで、連携したいGoogleアカウントでログインしておいて、
https://console.cloud.google.com/
を開く。一番最初は何かプロジェクトを作成しないと何もさせてもらえないので、とりあえず言われるがまま「新しいプロジェクト」で「My Project 1111」など作成する。以降はそのプロジェクト内がデフォルトになるはずである。
「APIとサービス」「+APIとサービスの有効化」から「Google Drive API」を選択し「有効化」する。
「OAuth同意画面」を開き「アプリ情報」を入れる。以下、例。
「アプリ名」:MyGoogleDrive
「ユーザーサポートメール」:hogeuser@example1155.jp
「デベロッパーの連絡先情報」:hogeuser@example1155.jp
「アプリのロゴ」「アプリのドメイン」「承認済みドメイン」はカラ(未入力)でOK。
「保存して次へ」→「スコープ」の設定になるので、「スコープを設定または削除」でスコープ一覧を開き、「Google Drive API」とあるものすべてにチェックを入れる(十数個程度)。
選んだら「更新」とし「保存して次へ」で、完了。「ダッシュボードへ戻る」
次に「認証情報」「+認証情報を作成」「OAuthクライアントID」を開き、
「アプリケーションの種類」で「デスクトップアプリ」を選択する。ここが最大のポイントで、これを「ウエブ アプリケーション」などを選択してしまうと連携時に
承認エラー エラー 400: redirect_uri_mismatch The redirect URI in the request, urn:ietf:wg:oauth:2.0:oob, can only be used by a Client ID for native application. It is not allowed for the WEB client type. You can create a Client ID for native application at https://console.developers.google.com/apis/credentials/oauthclient
となって連携不可になるので注意。名前はデフォルト(デスクトップクライアント)でOK。
「作成」すると、「クライアントID」「クライアントシークレット」が発行されるので、取っておく。これでGoogle側の準備も整った。
3、AWS Linux/DebianからGoogle Driveをマウントする
いよいよLinux側からのマウントトライ。ここからは一般ユーザーで行う。
google-drive-ocamlfuse -headless -id <クライアントID> -secret <クライアントシークレット>
-headlessをつけるのがポイント。ID、シークレットは2、で発行した自分のものを指定してください。
すると、
Please, open the following URL in a web browser: https://accounts.google.com/o/oauth2/auth?client_id=... Please enter the verification code:
などと、URLが出力されるので、これをダブルクリックしてPCブラウザを開く。AWS内である必要は無く、遠く離れた自分のPCのブラウザで大丈夫。
「アカウントの選択」「MyGoogleDriveに移動」※2、で設定したものと出るのでドライブ接続したいGoogleアカウントを選択し、
「MyGoogleDriveがGoogleアカウントへのアクセスをリクエストしています」と出るので「許可」する。※2、の「スコープ」で選択したアクセス権限
するとログイン「認証コード」が画面に出るのでコピーする。(このコードをコピーし、アプリケーションに切り替えて貼り付けて下さい)と出る。
この認証コードを上記Please enter the verification code:に貼り付けてENTERすれば、晴れて連携完了!
Access token retrieved correctly.
マウントする
cd mkdir mydrive google-drive-ocamlfuse /home/hogeuser/mydrive
mydriveの中身に、自分のGoogle Driveの「マイドライブ」が見えれば、接続完了!あとは普通にフォルダとして読み書きできる。
アンマウント(接続解除)する
fusermount -u /home/hogeuser/mydrive
とする。
4、「マイドライブ」ではなく「共有ドライブ」のフォルダをマウントするには
デフォルトではマイドライブのみがマウントされるので、別ドライブをマウントする場合、labelを作成し別管理でログインする。
https://github.com/astrada/google-drive-ocamlfuse/wiki/Team-Drives
に記載あり。
まずは、マウントしたい共有フォルダのIDを調べる。普通にデスクトップブラウザでGoogle Driveを開き、該当する共有フォルダを開くと、ブラウザのURLは
https://drive.google.com/drive/u/0/folders/AAAABBBBCCCCDDDD
などとなっているはずである。ここの「AAAABBBBCCCCDDDD」が、共有フォルダのIDであるので取っておく。
ここでは共有ドライブにマウントするためのラベルを「myTeamDrive」とする。まず、このラベルで別ログインを試みる。クライアントID・シークレットは同じでOK。
google-drive-ocamlfuse -headless -id <クライアントID> -secret <クライアントシークレット> -label myTeamDrive
最初と全く同じ認証を要求されるので、ブラウザで認証して、認証コードを貼り付ける。
無事完了したら、/home/hogeuser/.gdfuse/myTeamDrive/configを開いて編集する。
cd cd .gdfuse/myTeamDrive vi config team_drive_id=AAAABBBBCCCCDDDD
下のほうのteam_drive_idに、さきほどの共有フォルダのIDを指定すればOK!
あとはgoogle-drive-ocamlfuseコマンドにラベルをつけて別フォルダにマウントすればOK。
cd mkdir myshare google-drive-ocamlfuse -label myTeamDrive /home/hogeuser/myshare
myshareに、希望の共有フォルダの中身が見えていれば、成功!
※本記事内容の無断転載を禁じます。
ご連絡は以下アドレスまでお願いします★
さくらインターネットでPython MecabをCGIから使う
さくらインターネットのPHPでAnalytics-G4 APIを使う
インクルードパスの調べ方
【Git】特定ファイルを除外する.gitignore
【Ubuntu/Debian】NVIDIA関係のドライバを自動アップデートさせない
【Python】Spacyを使用して文章から出発地と目的地を抜き出す
HomeBrewでApache2を入れて自動起動つきで動かしPHPモジュールと連携する
macOSに標準付属のApacheを自動起動つきで動かす
HomeBrewでPostgreSQLを入れて自動起動つきで動かす
Windows版Google Driveが使用中と言われアンインストールできない場合
【C/C++】小数点以下の切り捨て・切り上げ・四捨五入
進研ゼミチャレンジタッチをAndroid端末化する
Windows11+WSL2でUbuntuを使う【2】ブリッジ接続+固定IPの設定
Googleスプレッドシートで図形をコピーして使いまわすには
【Linux】iconv/libiconvをソースコードからインストール
【Apache】サーバーに同時接続可能なクライアント数を調整する
Pythonで処理にかかった時間を計測するには
Windows11のコマンドプロンプトでテキストをコピーする