资讯动态

rclone Proton Drive 后端配置与使用指南:将端到端加密的 Proton Drive 接入 rclone

发布时间:2026/9/8 20:21:58 来源:尧图企业网站定制
rclone Proton Drive 后端配置与使用指南将端到端加密的 Proton Drive 接入 rclone【免费下载链接】rclonersync for cloud storage - Google Drive, S3, Dropbox, Backblaze B2, One Drive, Swift, Hubic, Wasabi, Google Cloud Storage, Azure Blob, Azure Files, Yandex Files项目地址: https://gitcode.com/GitHub_Trending/rc/rcloneProton Drive 是一款来自瑞士的端到端加密网盘本仓库为 rclone 提供了对应的 protondrive 后端让 rclone 可以像访问本地目录一样上传、下载、同步和挂载 Proton Drive 中的文件。本文以仓库中的官方后端文档 docs/content/protondrive.md 为主体结合后端实现源码 backend/protondrive/protondrive.go 讲解远程remote的交互式创建、全部标准/高级配置项、文件名校验规则、哈希与时间戳能力以及缓存、去重、Beta 限制等实战要点帮助读者完整掌握这一后端并能直接落地使用。一、后端背景与能力边界Proton Drive见 protondrive.md 描述是一个端到端加密的瑞士文件保险库客户端侧完成全部加解密。rclone 的protondrive后端复用了这套客户端加密机制从而支持 Proton Drive 的文件传输功能。需要了解的几个基本事实路径表示方式与其他 rclone 后端一致使用remote:path且支持任意深度例如remote:directory/subdirectory。API 文档不公开由于 Proton Drive 不对外发布其 API 文档本后端通过阅读 Proton 开源客户端源码、观察浏览器流量以 best-effort 的方式实现见 protondrive.md。Beta 状态本后端当前仍处于 Beta文档声明其实现被认为是正确的且全部集成测试均通过但由于 Proton Drive 协议随时间演变可能存在不兼容的账号。若遇到不兼容问题建议到 rclone 官方论坛反馈见 protondrive.md。登录前提易踩坑Proton Drive 的加密密钥必须已经通过浏览器常规登录生成过否则直接在 rclone 中使用该账号凭据会失败见 protondrive.md。也就是说新注册的账号应先在其网页/桌面客户端登录一次再配置 rclone。引入版本该后端从 rclone v1.64.0 开始引入见文档 front-matter。从后端注册源码看后端名称空间下导出的标识符为protondrive其注册信息fs.RegInfo位于 backend/protondrive/protondrive.go#L64-L205并在init()中完成。这也是选项文档自动生成的数据来源文档中的“autogenerated options”注释即指在fs.RegInfo中编辑后运行make backenddocs生成。二、通过 rclone config 交互式创建远程在终端运行以下命令进入交互式配置流程rclone config首次配置时选择新建远程并填写类型protondrive完整流程如下摘自 protondrive.md其中[snip]表示省略的无关选项No remotes found, make a new one? n) New remote s) Set configuration password q) Quit config n/s/q n name remote Type of storage to configure. Choose a number from below, or type in your own value [snip] XX / Proton Drive \ protondrive [snip] Storage protondrive User name user youprotonmail.com Password. y) Yes type in my own password g) Generate random password n) No leave this optional password blank y/g/n y Enter the password: password: Confirm the password: password: Option 2fa. 2FA code (if the account requires one) Enter a value. Press Enter to leave empty. 2fa 123456 Remote config Configuration complete. Options: - type: protondrive - user: youprotonmail.com - pass: *** ENCRYPTED *** Keep this remote remote? y) Yes this is OK e) Edit this remote d) Delete this remote y/e/d y要点说明name处填写远程别名后续命令统一用remote:引用下文示例均可把remote替换为你自定义的名字。user是你的 Proton 账号用户名邮箱例如youprotonmail.com。password由 rclone 在写入配置文件前自动 obscure 处理配置文件里显示的pass: *** ENCRYPTED ***即加密后的值。源码中密码的明文解包发生在NewFs阶段通过obscure.Reveal解密得到见 backend/protondrive/protondrive.go#L547-L569obscure 的加解密机制可参考 rclone obscure 命令文档。2fa仅在账号开启了双因素认证时需要填写未开启时直接回车留空。配置完成后凭据含内部的 access token、refresh token、salted key pass 等会被回写保存便于复用其内部字段以隐藏选项形式存放在 config map 中见 backend/protondrive/protondrive.go#L317-L351。验证与基本用法配置完成后即可直接用 rclone 命令操作 Proton Drive列出 Proton Drive 根目录下的目录rclone lsd remote:列出 Proton Drive 中的所有文件rclone ls remote:把本地目录source复制到 Proton Drive 中名为backup的目录rclone copy /home/source remote:backup后端的目录解析依赖dircache.DirCache以 Proton Drive 的 root link ID 作为锚点路径在查询前会经过 sanitize规范化与编码转换可参考 backend/protondrive/protondrive.go#L307-L315 以及NewFs中对根目录的初始化逻辑 backend/protondrive/protondrive.go#L537-L644。当根路径既是文件又是目录时会返回fs.ErrorIsFile这与 rclone 对这类后端的一贯行为一致。三、标准选项详解以下是 protondrive 的标准Standard选项均来自后端注册的fs.Optionbackend/protondrive/protondrive.go#L69-L97同时也存在于前端文档 protondrive.md。选项对应 CLI 长参数Config 键环境变量类型必填说明username--protondrive-usernameusernameRCLONE_PROTONDRIVE_USERNAMEstring是Proton 账号用户名password--protondrive-passwordpasswordRCLONE_PROTONDRIVE_PASSWORDstring是Proton 账号密码必须先用 obscure 混淆后输入参见 rclone obscure否则会报解密失败2fa--protondrive-2fa2faRCLONE_PROTONDRIVE_2FAstring否一次性 2FA 验证码也可用--protondrive-2fa000000形式在命令行直接提供otp_secret_key--protondrive-otp-secret-keyotp_secret_keyRCLONE_PROTONDRIVE_OTP_SECRET_KEYstring否开启双因素认证账号的 TOTP 密钥同样需要 obscure可用--protondrive-otp-secret-keyABCDEFGHIJKLMNOPQRSTUVWXYZ234567形式直接提供关于 2FA 与 OTP 的配合关系可从源码确认细节backend/protondrive/protondrive.go#L510-L524若配置了2fa字段则直接把它作为一次性验证码提交若2fa为空但配置了otp_secret_key则在登录时调用totp.GenerateCode来自github.com/pquerna/otp/totp基于当前时间实时生成动态码再作为TwoFA提交。因此二选一即可要么每次手动填最新 2FA 验证码要么提供静态 TOTP 密钥让 rclone 自动生成动态码后者更便于脚本化与集成测试。otp_secret_key属于敏感字段Sensitive: true且IsPassword: true见 backend/protondrive/protondrive.go#L98-L108。四、高级选项详解以下高级选项可在交互式配置中选择 Edit advanced config或以长参数形式在命令行覆盖。它们全部定义于 backend/protondrive/protondrive.go#L79-L203文档部分见 protondrive.md。mailbox_password邮箱密码 / 独立密码Configmailbox_password环境变量RCLONE_PROTONDRIVE_MAILBOX_PASSWORD类型 string非必填。适用场景开启“双密码two-password”模式的 Proton 账号需要用邮箱密码来解锁加密密钥。普通单密码账号无需填写。输入同样必须经过 obscure。文档提示其与登录密码的区别详见 Proton 官方知识库文章。代码中它是IsPassword: true的敏感项backend/protondrive/protondrive.go#L79-L88明文在NewFs中通过obscure.Reveal还原后作为MailboxPassword传入登录流程。encoding文件名编码规则Configencoding环境变量RCLONE_PROTONDRIVE_ENCODING类型 Encoding默认值Slash,LeftSpace,RightSpace,InvalidUtf8,Dot。含义控制文件名在与 Proton Drive 交互前的转义/还原策略通用机制参见 overview 编码章节。从默认值可见 Proton Drive 的文件系统限制不允许文件名中的/、前后空格、非法 UTF-8 字节以及.作为保留意义字符rclone 会对这些字符做编码层级的双向转换。源码中默认编码组合定义见 backend/protondrive/protondrive.go#L137-L144编码与路径清洗逻辑见 backend/protondrive/protondrive.go#L307-L315。original_file_size返回加密前文件大小Configoriginal_file_size环境变量RCLONE_PROTONDRIVE_ORIGINAL_FILE_SIZE类型 bool默认值true。作用Proton Drive 在服务端存储的是加密后的文件其体积大于明文。开启后 rclone 返回给上层的是解密前的原始文件大小关闭则返回加密后的大小。文档特别警告除非有特殊原因需要加密后大小否则应保持为true因为Open()等依赖原始内容大小做 seek/range 操作的特性在拿到错误大小时会无法正常工作。源码佐证Object.Size()在ReportOriginalSize为真时优先返回originalSizebackend/protondrive/protondrive.go#L1016-L1028。app_versionAPI 客户端版本标识Configapp_version环境变量RCLONE_PROTONDRIVE_APP_VERSION类型 string非必填。作用作为当前执行 API 请求的客户端标识随每个请求发送。Proton 对第三方集成推荐形如external-drive-projectversion的格式。留空时 rclone 会自行从自身版本派生出合规值因此该选项纯属可选。派生实现细节源码中的protonDriveAppVersionFromRcloneVersionbackend/protondrive/protondrive.go#L364-L433会用正则[^0-9A-Za-z.-]清洗 rclone 版本号中的非法字符并拼装成external-drive-rclone主.次.补丁形式预发布版本附带-stable/-dev/-beta等后缀最终在 backend/protondrive/protondrive.go#L464-L467 处注入。对应单元测试位于 backend/protondrive/protondrive_internal_test.go覆盖“由 rclone 版本派生 app version”和“shouldRetry 判定”两处核心逻辑。replace_existing_draft覆盖未完成的上传草稿Configreplace_existing_draft环境变量RCLONE_PROTONDRIVE_REPLACE_EXISTING_DRAFT类型 bool默认值false。背景当一次文件上传在完成前被取消或失败Proton 服务端会留下一个“draft”草稿。此后向同一位置再次上传同名文件时会被判定为冲突。true替换该草稿并重新开始上传集成测试需要设置为 true。false直接返回错误a draft exist - usually this means a file is being uploaded at another client, or, there was a failed upload attempt本次不上传任何内容。注意文档声明若此刻恰好有其他客户端也在同一位置并发上传置 true 时行为未知。该值最终被透传到 Proton-API-Bridge 的配置config.ReplaceExistingDraft见 backend/protondrive/protondrive.go#L479。enable_caching元数据缓存开关Configenable_caching环境变量RCLONE_PROTONDRIVE_ENABLE_CACHING类型 bool默认值true。作用Proton Drive 中的文件和文件夹以“link keyring”结构表示启用后 rclone 会缓存这类元数据以显著减少 API 调用、对服务端更友好。重要警告如果以 VFS 方式挂载 Proton Drive如rclone mount请关闭此特性因为当前实现不会在有外部变更时刷新或清理缓存。缓存一致性边界缓存面向“rclone 是访问该挂载点的唯一实例”这一场景设计Proton 的 event 系统用于感知远端变更的 API 机制尚未在 bridge 中实现因此其他客户端造成的更新不会反映到缓存中。若多个客户端并发访问同一挂载点存在读到过期数据stale data的风险。见 protondrive.md 以及代码 backend/protondrive/protondrive.go#L185-L202。源码中DirCacheFlush可清空目录缓存与 bridge 缓存f.protonDrive.ClearCache()主要服务于测试场景见 backend/protondrive/protondrive.go#L936-L942。descriptionConfigdescription环境变量RCLONE_PROTONDRIVE_DESCRIPTION类型 string非必填。为 rclone 通用字段仅用于给远程加备注说明不影响传输行为。五、功能特性哈希、时间戳与文件操作语义修改时间Modification timesProton Drive 目前不支持更新修改时间。源码中Object.SetModTime直接返回fs.ErrorCantSetModTimebackend/protondrive/protondrive.go#L1038-L1040Fs.Precision()名义返回time.Secondbackend/protondrive/protondrive.go#L931-L934仅用于表示时间精度假设。这意味着rclone sync等依赖修改时间判断新旧的操作不能依赖本后端的时间戳语义需要配合校验和进行决策。哈希支持后端只支持SHA1。Fs.Hashes()返回hash.Set(hash.SHA1)backend/protondrive/protondrive.go#L944-L947对象级Object.Hash在请求非 SHA1 类型时返回hash.ErrUnsupportedSHA1 值优先取自对象元数据中的 digest缺省时再通过 API 拉取活动 revision 的文件系统属性获得见 backend/protondrive/protondrive.go#L993-L1014。因此rclone check、rclone cryptcheck以及--checksum模式等可以正常借助 SHA1 校验两端一致性。其他传输语义从源码可推断分块加密与单线程下载Proton 明文文件被切成等大当前约 4 MB未来可能变化的数据块逐块独立加密块的加密后大小与 SHA1 写入元数据而原始大小不在元数据中。源码注释明确说明为避免在拿不到原始块尺寸时做出不安全假设暂不启用 rclone 的多线程下载而是把并发下载并解密放在后台完成因此Fs.Features中NoMultiThreading: truebackend/protondrive/protondrive.go#L583-L592。未知大小文件不可上传后端以errCanNotUploadFileWithUnknownSize拒绝流式未知大小的上传backend/protondrive/protondrive.go#L54。配额查询rclone about remote:可用底层读取账号的MaxSpace/UsedSpacebackend/protondrive/protondrive.go#L949-L971。清空回收站rclone cleanup remote:会调用EmptyTrash清空 Proton Drive 回收站backend/protondrive/protondrive.go#L648-L654。错误重试策略shouldRetry只对可恢复错误进行 pacer 重试例如 HTTP 5xx503 除外它由 go-proton-api 内部的 Retry-After 逻辑处理与带200501Drive 存储类错误码的瞬态失败对 4xx 永久性校验错误如无法验证的 key packet、账号未开通的上传格式不会重试避免把 pacer 拖到超时见 backend/protondrive/protondrive.go#L252-L283。六、命名限制与去重语义受限字符非法 UTF-8 字节会被替换处理机制与 overview 中的 invalid UTF-8 章节 描述一致。文件名左、右两侧的空格会被去除。这两条规则正好对应默认 encoding 中的InvalidUtf8、LeftSpace、RightSpace其余默认项Slash、Dot对应保留字符/与.的转义见第四节。Proton 官方 Web 客户端的相关校验位于其 drive 应用源码的 validation 逻辑中。重复文件Proton Drive不允许在同一路径下存在两个完全同名同路径的文件。一旦发生冲突最终文件是否被覆盖取决于上述高级配置replace_existing_drafttrue替换既有草稿后重传replace_existing_draftfalse默认返回 draft 冲突错误不执行覆盖。rclone 层面你还可以借助--backup-dir、--suffix、rclone copyto等常规手段避免覆盖误伤但服务端“不允许重名”是硬性约束这一点在设计与同步策略时需要特别留意。七、缓存模型与多客户端并发注意事项后端默认开启元数据缓存enable_caching默认 true缓存对象是 Proton Drive 的 link/keyring 元数据作用是减少 API 往返。需要重点记住两个边界文档与代码一致强调protondrive.md当前没有实现 Proton 的 event 系统因此其他客户端对同一账户的改动不会主动使缓存失效当 rclone 是唯一操作方时缓存是安全高效的一旦多个客户端同时访问同一挂载点可能读到过期数据。实际建议使用rclone mount/VFS 挂载 Proton Drive 时显式关闭缓存--protondrive-enable-cachingfalse避免外部客户端更新后缓存脏读若用批处理同步rclone copy/sync等一次性任务且无并发写入方保持默认即可获得更好的 API 友好度与速度。八、实现架构与局限性说明底层依赖链本后端并不直接对接 Proton 官方 SDK而是构建在两层库之上见 protondrive.mdgo-proton-api提供最基础的 API 调用构件与错误处理如 429 指数退避但本质上是“裸”的 API 接口层——例如 Proton Drive 文件的加解密并不在该库中提供。Proton-API-Bridge在 go-proton-api 之上补齐 gap封装调用 Proton API 前后的大量复杂任务尤其是整套加密方案使 rclone 可以在此之上快速实现。仓库源码以github.com/rclone/Proton-API-Bridge与github.com/rclone/go-proton-api官方 go-proton-api 的 fork形式引入见 backend/protondrive/protondrive.go#L15-L16。Bridge 层的代码同样来自社区对 Proton 开源客户端与协议观察的产物官方文档缺失意味着其中可能存在错误。这解释了后端的 Beta 定位——协议演进可能造成部分账号不兼容。登录与会话复用流程结合源码从 backend/protondrive/protondrive.go#L470-L534 可以还原完整的建连流程路由 HTTP 传输层与日志到 rclone 体系使--dump headers、--ca-cert、-v/-vv等全局开关对 Proton 请求同样生效传递replace_existing_draft、enable_caching等选项到 bridge 配置检查 config map 中缓存的client_uid、client_access_token、client_refresh_token、client_salted_key_pass这些以隐藏敏感项存储见 backend/protondrive/protondrive.go#L109-L136有则优先以UseReusableLogin复用复用失败则清理并回退到用户名/密码登录用户名/密码登录时按需填入 mailbox password并按上一节逻辑填入 2FA 码或由 OTP 密钥现场生成登录成功后将返回的会话凭据写回 config map 供下次复用。这意味着首次rclone config创建远程之后只要本地凭据缓存有效后续命令无需每次重新输入密码也解释了为何配置文件里除了用户名/密码外还会出现若干隐藏的内部 token 字段。适用范围与已知边界小结不适合作为多人/多进程共享挂载下的实时文件系统无事件驱动的缓存失效单实例 VFS 挂载建议关闭缓存无法通过 rclone 更新文件修改时间跨端时间戳一致性需要以 SHA1 为准服务端同名文件唯一冲突时由replace_existing_draft决定覆盖或报错受限于分块加密特性暂不提供 rclone 多线程下载大文件传输应评估单连接吞吐后端为 Beta遇账号不兼容情形应向 rclone 社区反馈可附带协议层面细节帮助定位。九、进一步探索与验证完整后端文档与自动生成的选项总表docs/content/protondrive.md后端实现主文件选项注册、认证、Fs/Object 实现、重试策略、哈希与大小逻辑backend/protondrive/protondrive.go集成测试套件涵盖多组账号配置、上传冲突、删除等端到端场景backend/protondrive/protondrive_test.go单元测试app version 派生、重试判定等内部逻辑backend/protondrive/protondrive_internal_test.go文件名编码与非法字符的通用处理规范docs/content/overview.md密码 obscure 加密/解密用法rclone obscure 命令配置完成后建议先用rclone lsd remote:验证连通性再以rclone copy --dry-run或rclone check remote:小范围试跑确认账号的加密密钥已生成、缓存与冲突选项符合你的挂载/同步场景即可正式投入使用。【免费下载链接】rclonersync for cloud storage - Google Drive, S3, Dropbox, Backblaze B2, One Drive, Swift, Hubic, Wasabi, Google Cloud Storage, Azure Blob, Azure Files, Yandex Files项目地址: https://gitcode.com/GitHub_Trending/rc/rclone创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价