アプリケーション開発ポータルサイト
ServerNote.NET
Amazon.co.jpでPC関連商品タイムセール開催中!
カテゴリー【GoogleAmazon/AWSDebian
SSH接続しかできないAWS内の仮想マシン(Debian)からGUI無しでGoogle Driveにアクセスする
POSTED BY
2023-04-23

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に、希望の共有フォルダの中身が見えていれば、成功!

※本記事は当サイト管理人の個人的な備忘録です。本記事の参照又は付随ソースコード利用後にいかなる損害が発生しても当サイト及び管理人は一切責任を負いません。
※本記事内容の無断転載を禁じます。
【WEBMASTER/管理人】
自営業プログラマーです。お仕事ください!
ご連絡は以下アドレスまでお願いします★

☆ServerNote.NETショッピング↓
ShoppingNote / Amazon.co.jp
☆お仲間ブログ↓
一人社長の不動産業務日誌
【キーワード検索】