2.Python3环境和AutoRclone的安装

title.jpg
上一节:

2.a.SA原理和作用介绍

说到SA,它是所有google云盘搬运工具的核心搬运工,创建大量SA账号,批量管理,我们一般用AutoRclone操作,后续很多同质工具和较为复杂的配置,都是基于SA账号的管理和批量使用。

如果你在接下来的学习中,发现后续步骤繁琐,原理理解一头雾水,那么,先好好掌握SA的批量创建和管理,就能获得关键的阶段性成果,先弄好这个,以后抽空再配置其他工具,会容易很多。

SA的批量获取一般用AutoRclone比较方便,而管理设置完毕后,我们就可以导入Gclone之类的开始享用了,那么,SA的获取和管理,大致的流程如下:

  1. 安装 Python3环境 和 AutoRclone
  2. 借助谷歌开发者平台,生成SA服务账号
  3. 将服务账号 service accounts 加入到 Google Groups方便管理和迁移
  4. 安装 gclone 开始复制文件

市面上很多类似的工具只需要把/root/.config/rclone/rclone.conf配置文件和AutoRclone/accounts/文件夹下的SA账号信息保存好,无论是迁移还是继续配置,都是通用的。
使用autorclone的脚本批量授权sa账号到你的团队盘ID里,目前似乎可能出现bug,如果在拷贝文件时,日志提示404文件不存在
报错日志的意思是找不到对应的目录ID,这种情况会发生在SA没有对应目录的阅读权限的时候。
当进行server side copy时,需要向Google的服务器提交要复制的文件ID,和复制的位置,也就是新创建的目录ID,由于在请求时是随机选取的SA,所以当选中没有权限的SA时,这次拷贝请求没有对应目录的权限,就会发生图中的错误。
所以,上述这些问题的源头是,sa目录下,混杂了没有权限的json文件.
解决办法建议上传sa到团队盘或者群组的时候,自己去团队盘成员管理或者群组页面看看增加的人数是否一致,再次上传一般就能补齐.

如果在后面的章节使用GD-Utils百宝箱时发生此种情况,还可以使用百宝箱自带的脚本验证,这个会在对应章节提到。

在项目目录下,执行 git pull 拉取最新代码
执行 ./validate-sa.js -h 查看使用说明
选择一个你的sa拥有阅读权限的目录ID,执行 ./validate-sa.js 你的目录ID
程序会读取sa目录下所有json文件,依次检查它们是否拥有对 你的目录ID 的阅读权限,如果最后发现了无效的SA,程序会提供选项允许用户将无效的sa json移动到特定目录。
将无效sa文件移动以后,如果你使用了pm2启动,需要 pm2 reload server 重启下进程。

2.b.开始安装python3

准备工具:

  • Google账号一个
  • Python3
  • 谷歌团队盘Team Drive
  • Rclone

开始:
以win10为例,配置AutoRclone:
前面提到,cmd工具需要全局代理,我们通过之前配置好的sstap转发所有本地流量到v2ray获得类似全局路由效果,然后打开cmd.exe
python3的安装,AutoRclone是使用python语言编写,基于rclone的拓展工具,我们在github页面下载此项目的源码zip打包:
https://github.com/xyou365/AutoRclone
和rclone,之前下载过了,就不再演示
https://rclone.org
如果你想本地挂载,可能还需要下载winfsp,类似于FUSE的文件管理工具
https://github.com/billziss-gh/winfsp
然后去python官网下载3系列:
https://www.python.org/
选个最新的exe 64位系统的安装包即可,如果你无法直接访问,记得像我一样挂好网页代理,一般的ssr或者v2ray就可以
Windows x86-64 executable installer
双击exe进行安装,记得勾选add
python3.8 to PATH,忘记的自己按照之前rclone加入系统变量path路径的方法,手动添加也一样。
选择自定义安装,只需要安装pip包管理器和py launcher方便运行即可
安装完毕,提示解锁系统路径字符长度限制,如果你的安装路径很长,记得解锁
然后打开cmd或者powershell输入python,查看是否安装成功
输入exit()退出或者直接关闭都行

2.c.配置autorclone所需依赖

python3安装完毕,我们再查看autoRclone的zip包
方便第一次接触AutoRclone的朋友,我们稍微看一下此工具主要4个功能:
rclone_sa_magic.py
gen_sa_accounts.py
add_to_team_drive.py
add_to_google_group.py

以及一个credentials文件夹和accounts文件夹

我们将AutoRclone-master代码文件夹解压放到E:software目录下
然后在AutoRclone-master文件夹里打开cmd或者powershell工具

方法提供两个常用的:
1.直接地址栏输入cmd回车
2.shift+鼠标右键,选择在此处打开powershell(s)/命令(w)窗口

输入 pip3 install -r requirements.txt
开始安装autorclone项目需要的依赖包

如果你的pip3包管理器比较陈旧,安装依赖出错,可以尝试升级下pip3后再安装依赖:
python -m pip install -U pip
如果你对sstap和v2ray不熟悉,条件不具备,只有ss/ssr,可以尝试使用proxifier进行全局代理配置,搭配ss/ssr,这里简单说一下,演示在第一节提过:
添加proxy servers,地址127.0.0.1,端口用ss/ssr的本地监听端口,一般是1080,socks5代理,check
proxification rules 将localhost和ss/ssr添加直连action(direct),其他所有流量走刚才的127.0.0.1:1080
socks5代理,启动,百度输入ip,是你ss/ssr的服务器ip,则说明全局代理生效了

2.d.配置AutoRclone

https://developers.google.com/drive/api/v3/quickstart/python
默认项目名QuickStart即可,项目类型选择默认的Desktop app
点击下载授权文件:credentials.json
https://console.developers.google.com/
以后也可以随时去开发服务台下载该文件。
将授权文件放到autorclone项目下,或者你喜欢的其他文件目录下也行:
E:softwareAutoRclone-master\

2.e.批量创建SA服务号和项目

最后一个1代表要创建的项目个数,其中1个项目有100个服务号,1个服务号可以有750G/天的流量,100个就是75T,你不够用就创建个2-4个,越多越属于滥用,封号风险越大,自己把握,改末尾的数字为自己需要的项目数即可。如果你是谷歌个人账号,建议一次1个项目操作

python gen_sa_accounts.py --quick-setup 1

此时有三种情况,我们按需使用合适的指令

  1. 你的谷歌账号在https://console.developers.google.com/没有创建任何项目则进行如下操作
    创建1个新的项目,并且生成100个sa账号,后续加入sa到此项目,并下载所有sa配置文件到autorclone的accounts文件夹下,那么久使用上述指令
  2. 你的https://console.developers.google.com/开发控制台之前已经创建过一些项目了,上述指令则会将你原来存在的所有项目下都创建100个sa账号,同时新建1个项目和对应的100sa。如果你只想在你的账号现状上新建1个项目专门用来生成管理sa账号和autorclone服务,那么使用如下指令:
python gen_sa_accounts.py --quick-setup 1 --new-only

修改数字则代表新建对应项目和x100数目的sa账号,而不影响已存在的项目。

  1. 你账号上已经有创建的项目,你不需要新建项目,只需要在现存的项目里创建sa账号,则使用如下指令:
python gen_sa_accounts.py --quick-setup -1

即采用负1即可。

版本不同,你的系统是否已经安装python2,会导致python3默认操作指令可能不太一样,其他情况你的python如果没有对应指令,可以尝试将python改成py3,python3解决

弹出授权地址后,复制在浏览器中打开,此时登录的google账号务必是刚才创建quickstart
python项目所对应的账号,请保持一致,方可成功授权

如果是第一次使用,会让你打开页面请求开启google drive 的Service Usage API授权,类似提示:

Service Usage API has not been used in project 372668230525 before or it is disabled.
Enable it by visiting https://console.developers.google.com/apis/api/serviceusage.googleapis.com/overview?project=372668230525
then retry. If you enabled this API recently, wait a few minutes for the action
to propagate to our systems and retry.

浏览器打开后点击enable开启,再回到powershell/cmd,回车键再次尝试

查看我们的accounts文件夹下,应该成功下载了对应的sa账号信息了,先打个包留存备用吧
另外,点击https://console.developers.google.com/选择任意项目查看Credentials项,你也可以查看每个项目下100个SA账号信息。
SA账号的生成,就完成了,可以说,整个教程的核心,就是SA账号的获取,如有茫然,请多次观看,配合文字教程,巩固熟练

2.f.SA账号的操作和管理进阶

我们通过查看 帮助文件 python gen_sa_accounts.py -h,可以看到一些有用的参数,

一些有用的参数

optional arguments:
  -h, --help            show this help message and exit
  --path PATH, -p PATH  Specify an alternate directory to output the credential files.
  --token TOKEN         Specify the pickle token file path.
  --credentials CREDENTIALS
                        Specify the credentials file path.
  --list-projects       List projects viewable by the user.
  --list-sas LIST_SAS   List service accounts in a project.
  --create-projects CREATE_PROJECTS
                        Creates up to N projects.
  --max-projects MAX_PROJECTS
                        Max amount of project allowed. Default: 12
  --enable-services ENABLE_SERVICES
                        Enables services on the project. Default: IAM and Drive
  --services SERVICES [SERVICES ...]
                        Specify a different set of services to enable. Overrides the default.
  --create-sas CREATE_SAS
                        Create service accounts in a project.
  --delete-sas DELETE_SAS
                        Delete service accounts in a project.
  --download-keys DOWNLOAD_KEYS
                        Download keys for all the service accounts in a project.
  --quick-setup QUICK_SETUP
                        Create projects, enable services, create service accounts and download keys.
  --new-only            Do not use exisiting projects.

这里简单演示下两个可能会用到的参数

  1. 单独下载某个项目下的sa账号,使用上述参数的 --download-keys
  2. 删除多余的SA账号,使用参数 --delete-sas
    示例:

python gen_sa_accounts.py --list-projects列出所有项目
python gen_sa_accounts.py --delete-sas saf-86eg4v4tgm5k-w7rpw7r9ahwin删除指定项目下的SA文件
https://console.developers.google.com/apis/credentials?project=saf-86eg4v4tgm5k-w7rpw7r9ahwin&folder=&organizationId=

查看该项目下sa文件都已经成功删除完毕了
但是,本地accounts文件夹下已经下载的sa 配置文件不会被删除,我建议是全部删除后,使用--download-keys选择性下载指定单个项目的sa,毕竟之后要用到群组管理的话,谷歌个人账号一天只能加100sa到群组里,如果想快速上手,就别一次性搞超过100个sa,一个个项目来,别急

python gen_sa_accounts.py --download-keys saf-u6cfsufzqb-dk6sogkz2p1yuop

我们尝试单独下载一个项目下的100sa文件,发现运作正常

就拿这100个SA作为下一步的示范吧
对了,别忘记把刚才删掉的sa补上:

python gen_sa_accounts.py --create-sas saf-86eg4v4tgm5k-w7rpw7r9ahwin

然后将SA文件夹路径配置到rclone里,没错,是rclone,AutoRclone也是基于rclone的功能进行了一些拓展,本质还是操作rclone的功能。
拷贝下文件试试效果吧!
拷贝完可以通过rclone指令指定AutoRclone文件夹下生成的conf文件配置来查询文件个数是否一致:

rclone --config rclone.conf size --disable ListR src001:源路径
rclone --config rclone.conf size --disable ListR dst001:目标路径

2.g. SA账号直接添加到团队盘流程

python add_to_team_drive.py -h查看帮助
此脚本用于直接添加SA账号到团队盘,属于标准操作,但是缺点还是很明显的:

  1. a.如果你是个松鼠党,每次大量sa添加删除还是非常繁琐的,虽然有自动删除团队盘里的sa脚本,不过等你发现用的时候失效了,得手动删600个sa的时候,心中肯定一万头草泥马奔过。
  2. b.团队盘加满600人后也占位置,不美观。
  3. c.有的edu团队盘无法在域外分享,直接用SA走服务端拷贝到别的团队盘可能会遇到阻碍。
  4. d.好心大佬邀你进团队盘拷贝,肯定不太想看到你拖儿带女几十上百号人涌入。

而且autoRclone的自动切换处于beta测试阶段,一般都只是用来生成sa账号,推荐操作还是添加群组,之后都是拿gclone和更快更强的自动切换工具来玩,把autorclone丢一边当个工具人而已。
如果你没有团队盘,网上找找免费的或者买些吧,对于不同渠道的团队盘风险和靠谱程度,我在后面单独来说。
如果你不用团队盘。个人盘每24h 750gb限制,使用sa的意义可以忽略,当然,只需要rclone的话,也不会来看这篇教程了对吧
好了,我们作为基础演示,还是过一遍sa直接添加到团队盘的流程吧:

python add_to_team_drive.py -d SharedTeamDriveSrcID
python add_to_team_drive.py -d SharedTeamDriveDstID

而团队盘ID是打开团队盘,根目录所在网址,形如:
https://drive.google.com/drive/u/0/folders/0AHKb_1xkottteskvg

上面的连接里0AHKb_1xkottteskvg就是团队盘的ID,文件夹ID也是类似查看
这里演示一下:

python add_to_team_drive.py -d 0AIl3Me6keYC1Uk9PVA

可能一次没有完整上传,多执行一次看看。这个bug,在后续gd-utils百宝箱有相应检测指令可以剔除未成功加入的sa账号

python add_to_team_drive.py -d 0AK-jeaa5dIZeUk9PVA

将你的资源盘ID和目标盘ID找出来,将之前的sa人员添加到两个团队盘里,就可以操作两个盘文件的相互拷贝等功能了。当然了,两个盘建议你都设置成管理员,像删除文件夹,清空回收站需要“Manager"管理员权限而不仅仅是content Organizer

接下来就可以开始拷贝拉,对于走服务器的流量(server side copy),适用于公开分享的文件夹链接到团队盘,以及团队盘到团队盘的拷贝。

参考指令示例:

python rclone_sa_magic.py -s SourceID -d DestinationID -dp DestinationPathName -b 1 -e 100

注意-begin -end的sa账号序列,这里是100个sa,所以-e 100即可。
如果是大量小文件的分享地址,很难完整快速读取一遍的话,可以加入
--disable_list_r来跳过文件列表读取,不推荐日常使用此跳过指令

ID可以是团队盘也可以是文件夹ID, DEstinationPathName则是对应ID下创建的文件夹名,没有就会新建。
好,我们实际演示下,拷贝anime团队盘下的文件夹到test团队盘根目录看看效果:

python rclone_sa_magic.py -s 1vHU2C88NlN2Bj-BDwWSIx9VnKLUpCoHk -d 1xTbn_MeTbAZkX4HZa0gbuk-eHVtHCFw8 -dp /new/test/ -b 1 -e 100

运行拷贝后,autorclone会自动生成rclone.conf配置文件到安装目录下,通过环境变量自动运行rclone,所以rclone不需要和autorclone放一块的。打开autorclone目录下的rclone.conf可以发现形如

[src001]
type = drive
scope = drive
service_account_file = E:/software/AutoRclone-master/accounts/00e7a4ca46802b21eeaacede8e83402cc4eb6a2a.json
root_folder_id = 1vHU2C88NlN2Bj-BDwWSIx9VnKLUpCoHk
[dst001]
type = drive
scope = drive
service_account_file = E:/software/AutoRclone-master/accounts/00e7a4ca46802b21eeaacede8e83402cc4eb6a2a.json
root_folder_id = 1xTbn_MeTbAZkX4HZa0gbuk-eHVtHCFw8

的配置文件,配置好了资源盘和目标盘的SA信息,而默认的拷贝是3个tps乘3个SA线程transfer,每秒请求9次,而演示文档只有600来GB,1个SA就搞定了,系统提示其他线程的无法访问,是正常的

我们使用rclone size指令核对下拷贝结果:

rclone --config rclone.conf size --disable ListR src001:/"sakimi chan 合集"/
rclone --config rclone.conf size --disable ListR dst001:/new/test

为了测试是否会自动切换跑满的sa,我们再次拷贝这600来GB文件到test盘,这次换个dp目录名:

python rclone_sa_magic.py -s 1vHU2C88NlN2Bj-BDwWSIx9VnKLUpCoHk -d 0AK-jeaa5dIZeUk9PVA -dp /anotherdir/ -b 1 -e 100

可以发现,当系统判定sa1没有速度后,自动替换成sa2开始接力,虽然判定逻辑是CNT_DEAD_RETRY = 100 100次无文件传输后切换大概是300秒,5分钟,而没有统计出第一次的size_GB_done(600GB+)+第二次的size_GB_done(138GB)实际已经size_GB_done大于SIZE_GB_MAX = 735

可能是没做多次运行使用量累加运算吧,不过不算多碍事。核心判定做的是两个条件,嫌切的慢,自行减少CNT_DEAD_RETRY =100默认值就行。

判断切换SA触发逻辑核心

if size_GB_done >= SIZE_GB_MAX or cnt_dead_retry >= CNT_DEAD_RETRY

为了减少演示等待,我将cnt_dead_retry设置为5次,这样只需要等待15s左右就可以跳过达到上限的sa账号了
演示完毕,此刻你基本上可以完成团队盘到团队盘大量文件对拷,相对于普通rclone就是质的提升了,除了每次要打开powershell手动指令拷贝一下,已经是非常够用了,除了成员创建名字丑了点,本地win要挂下全局代理,没其他大毛病了。

对于本地到团队盘,则可以用类似指令拷贝:

python rclone_sa_magic.py -sp YourLocalPath -d DestinationID -dp DestinationPathName -b 1 -e 100

我们也演示下将本地一个文件夹上传到test团队盘根目录:

python rclone_sa_magic.py -sp G:\"OneDrive - omo.moe"\图片\loli -d 0AK-jeaa5dIZeUk9PVA -b 1 -e 100

一切顺利。
查看autoRclone安装目录下的log_rclone.txt可以检查日志记录

这样,autoRclone普通用法基本上就告一段落了。由于autoRclone对OneDrive之类拷贝到google drive这些rclone原生功能支持全面程度不够,操作的不太人性化。
我们将SA加入群组,使用群组操作SA这些功能,使用Gclone来替代。

linux系统可以使用

tail -f log_rclone.txt

来查看拷贝日志。

2.h.提取SA信息,加入群组

提取sa之前,我们先把之前加入团队盘的sa删除掉,使用脚本:https://github.com/Rhilip/AutoRclone/blob/master/remove.py

使用方法则是:

python remove.py --drive-id  --prefix  --suffix --role

匹配邮箱地址前缀或者后缀,或者角色,这里我们用autoRclone默认分配的成员角色都是fileOrganizer,即文件管理员,那么直接用此匹配条件删除即可,示例:

python remove.py --drive-id 0AK-jeaa5dIZeUk9PVA --role fileOrganizer
python remove.py --drive-id 0AIl3Me6keYC1Uk9PVA --role fileOrganizer

这样两个测试盘里的sa用户全部清除完毕
我们开始思考如何提取SA文件里的邮箱,用户名这些特定信息,用来添加群组成员

  1. 方法1:chrome插件
    https://chrome.google.com/webstore/detail/email-extractor/jdianbbpnakhcmfkcckaboohfgnngfcc

chrome浏览器安装完毕后,访问
https://console.developers.google.com/
开发者控制台,找到对应项目下的sa列表,选择每页显示100个,启用email extractor插件,发现邮箱地址,选择save as csv文件,下载完毕后修改后缀为.csv即可

  1. 方法2:大佬的分割 提取脚本:
    window系统,可以使用大佬的脚本:

https://www.bilibili.com/read/cv5428249/
这个文章里面提供的exe脚本getuserByFeiFan,不太确定原作者是谁,放到autoRclone安装目录下的accounts文件夹里面再运行
然后还有这个loc大佬的py脚本和项目地址:
https://www.hostloc.com/thread-670126-1-1.htmlhttps://github.com/Sheldonsix/A-python-script-of-AutoRclone-or-gclone
这个脚本基于python3,可以输出用户名和邮箱,自己手动改下路径,保存的email文件名,然后后缀保存为.py即可在powershell里面通过python环境运行
另外
linux系统下,可以直接使用系统自带指令处理.json 用户信息,提取为txt,这个我们放到linux安装autoRclone的流程章节会详细再说

Linux 系统批量提取sa中email信息指令

参看 http://fxxkr.com/2020/04/06/onekey-print-email-from-google-sa-json/
其中$path = json文件所在目录 #例如 /root/accounts
最终保存 email 至 ~/email文件中,命令如下

cat $path/*.json | grep "client_email" | awk '{print $2}'| tr -d ',"' > ~/email

awk grep sed都是常用的正则表达处理数据用的指令
如果想要每 10行 分组空行可以把命令简单改成这样

cat $path/*.json | grep "client_email" | awk '{print $2}'| tr -d ',"' | sed 'N;N;N;N;N;N;N;N;N;/^$/d;G' > ~/email

非 GSuite Admin,咱们普通用户使用这个10行分组模式可以方便复制导入 GoogleGroups 不容易眼花(推荐)
不过我账号实测一次性加入100个成员也是没问题的

cat ~/email

就可以查看是否ok了,如果想方便使用vps运行此指令,需要从windows上传你的sa json文件的话,可以使用xshell的lrzsz功能,实现win和linux文件快速传递。
xshell连上vps,输入

yum install lrzsz -y

安装完毕lrzsz,输入rz回车,即可选择本地上传100个.json文件到vps,执行完毕后,输入sz 文件名,则下载到本地电脑。
这里就不做演示了,此方法在centos7安装antoRclone流程中再做演示了。

另外,如果你是gsuite管理员,创建的群组可以直接通过autoRclone的
add_to_google_group.py脚本上传,指令演示:

python add_to_google_group.py -g groupname@yourdomain.com

我们拿到了email清单,就可以开始创建群组了

2.i.创建群组:

https://groups.google.com/
点击CREATE GROUP红色按钮创建新的群组,提示升级新的群组版本建议升级后再操作
填写群组信息,只需要记住Group email address并保持Group type为默认的Email list即可

添加成员,我测试应该是可以批量加人的,没有10个一次的限制,但是每日100个限制还是100个
建议认真复制,重复传错的貌似也算进每日限额100个里。
然后将群组邮箱地址依次加入需要拷贝的两个团队盘中,设置为管理员权限,测试下效果吧:
依然是拷贝之前的文件夹,检查全局代理状态正常后。
拷贝anime团队盘下的文件夹到test团队盘根目录看看效果:

python rclone_sa_magic.py -s 1vHU2C88NlN2Bj-BDwWSIx9VnKLUpCoHk -d 1xTbn_MeTbAZkX4HZa0gbuk-eHVtHCFw8 -dp /new/test1/ -b 1 -e 100

发现经过15s左右,自动跳过第一个已经满750gb额度,然后第二个账号拷贝完接近300GB后,也达到750GB额度不再传输文件,等待15s,自动切换到第三个sa。最后拷贝完毕,一切正常。
好了,我们回味下群组和普通sa拖家带口的区别,很明显,群组的优势就是无需通过脚本或者手动上传大量sa账号到团队盘,而且删除的时候,群组小手一点移除一个邮箱即可,而sa账号批量删除没有调用google drive api的脚本操作的话,简直是酸爽。无论是居家旅行,拜亲访友,群组都是大家喜闻乐见的选择,而且某些教育盘跨域分享,直接域外sa成员加入还无法拷贝出域,群组可以绕过此类限制。

2.j. AutoRclone的流程小结

虽然目前gclone和gd-utils百宝箱越来越便利和热门,我还是一板一眼给大家介绍了autoRclone的基本操作。
其实从日常操作指令上来说,autoRclone学习成本是要高于Gclone的,虽然它主要面向针对团队盘对拷团队盘,公共共享文件夹拷贝至团队盘,功能没有gclone保留的rclone功能完整,但是它和Gclone的部署流程和操作原理,几乎是一模一样的,我们熟悉下autoRclone的操作后,再配置Gclone就非常容易理解了:

接下来第三章,我们开始gclone的安装流程

下一节:


上一节:

另外附送关于google drive api报错解决方案可参考阅读:
https://developers.google.com/drive/api/v3/handle-errors

Last modification:April 2, 2022
If you think my article is useful to you, please feel free to appreciate