Задача
Не так давно для моего проекта потребовалось настроить автоматическую выгрузку бэкапов на Google Drive из ОС Linux. Официального клиента от Google для Linux нет, и как оказалось будет он нескоро. Поэтому я начал изучать существующие неофициальные решения и понял, что многие из них не работают при действующей политики безопасности Google. Т.е. при авторизации приложение блокировалось, и даже поставленная галочка в настройках аккаунта, разрешающая авторизацию через ненадежные приложения, не помогала.
Rclone
После пары часов изучения существующих клиентов, наткнулся на программу Rclone. Она позволяет делать авторизацию не только через аккаунт Google, но и через ID и Secret Key приложения, созданного в Google Cloud Platform. Это решение мне показалось самым оптимальным, и я решил попробовать его реализовать.
Получение ID и Secret Key
1. Создайте проект в Google Cloud Platform
2. Перейдите на вкладку APIs & Services => Credentials => Create credentials. Выберите пункт OAuth Client ID. В качестве типа приложения выбирайте Веб-приложение.
После этого вы получите заветные Client ID и Secret Key.
Настройка Rclone
Установите Rclone
apt install rclone
И перейдите к настройке
rclone config
Введите n для создания нового соединения
No remotes found - make a new one
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n
Даем название и выбираем тип сервиса Google Drive и вводим 15
13 / FTP Connection
\ "ftp"
14 / Google Cloud Storage (this is not Google Drive)
\ "google cloud storage"
15 / Google Drive
\ "drive"
16 / Google Photos
\ "google photos"
17 / Hadoop distributed file system
\ "hdfs"
Далее указываем client_id и client_secret. Выбираем права доступа к диску
Scope that rclone should use when requesting access from drive.
Enter a string value. Press Enter for the default ("").
Choose a number from below, or type in your own value
1 / Full access all files, excluding Application Data Folder.
\ "drive"
2 / Read-only access to file metadata and file contents.
\ "drive.readonly"
/ Access to files created by rclone only.
3 | These are visible in the drive website.
| File authorization is revoked when the user deauthorizes the app.
\ "drive.file"
/ Allows read and write access to the Application Data folder.
4 | This is not visible in the drive website.
\ "drive.appfolder"
/ Allows read-only access to file metadata but
5 | does not allow any access to read or download file content.
\ "drive.metadata.readonly"
Далее выбираем настройки для следующих пунктов по умолчанию
root_folder_id>
Service Account Credentials JSON file path
Leave blank normally.
Needed only if you want use SA instead of interactive login.
Leading `~` will be expanded in the file name as will environment variables such as `${RCLONE_CONFIG_DIR}`.
Enter a string value. Press Enter for the default ("").
service_account_file>
Edit advanced config? (y/n)
y) Yes
n) No (default)
y/n> n
Remote config
Use auto config?
* Say Y if not sure * Say N if you are working on a remote or headless machine
y) Yes (default)
n) No
y/n> y
После этого вам будет предложено перейти по ссылке
If your browser doesn't open automatically go to the following link: http://127.0.0.1:53682/auth?state=some_code
Log in and authorize rclone for access
Waiting for code...
Просто открываете её с того компьютера, с которого подключились по ssh к серверу, и даете разрешение на работу с диском.
Отправка данных
Полный список команд можно получить через --help, поэтому приведу только список основных:
rclone mkdir google-drive:[folder] - создание папки в облаке
rclone copy [local-src] google-drive:[folder] - копирование в облако
rclone copy google-drive:[folder] [local-src] - копирование в локальную папку
rclone sync [local-src] google-drive:[folder] - синхронизация с облаком приоритет на локальной папке
rclone sync google-drive:[folder] [local-src] - синхронизация с облаком приоритет на облако
rclone lsd google-drive: - показать созданные [folder]
rclone ls google-drive:[folder] - показать файлы в [folder]