FTP

FTP 即文件传输协议。Rclone 对 FTP 的支持是通过 github.com/jlaffaye/ftp 包实现的。

Rclone 的 FTP 后端的限制

路径指定为 remote:path。如果路径不以 / 开头,则它相对于用户的主目录。空路径 remote: 表示用户的主目录。

配置

要创建一个名为 remote 的 FTP 配置,请运行:

rclone config

Rclone 配置会引导你完成一个交互式的设置过程。一个最小化的 Rclone FTP 远程配置只需要主机名、用户名和密码。对于匿名 FTP 服务器,请参阅 下面的内容

No remotes found, make a new one?
n) New remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
n/r/c/s/q> n
name> remote
Type of storage to configure.
Enter a string value. Press Enter for the default ("").
Choose a number from below, or type in your own value
[snip]
XX / FTP
   \ "ftp"
[snip]
Storage> ftp
** See help for ftp backend at: https://rclone.cn/ftp/ **

FTP host to connect to
Enter a string value. Press Enter for the default ("").
Choose a number from below, or type in your own value
 1 / Connect to ftp.example.com
   \ "ftp.example.com"
host> ftp.example.com
FTP username
Enter a string value. Press Enter for the default ("$USER").
user> 
FTP port number
Enter a signed integer. Press Enter for the default (21).
port> 
FTP password
y) Yes type in my own password
g) Generate random password
y/g> y
Enter the password:
password:
Confirm the password:
password:
Use FTP over TLS (Implicit)
Enter a boolean value (true or false). Press Enter for the default ("false").
tls> 
Use FTP over TLS (Explicit)
Enter a boolean value (true or false). Press Enter for the default ("false").
explicit_tls> 
Remote config
Configuration complete.
Options:
- type: ftp
- host: ftp.example.com
- pass: *** ENCRYPTED ***
Keep this "remote" remote?
y) Yes this is OK
e) Edit this remote
d) Delete this remote
y/e/d> y

要查看 remote 主目录下的所有目录

rclone lsd remote:

创建一个新目录

rclone mkdir remote:path/to/directory

列出目录的内容

rclone ls remote:path/to/directory

/home/local/directory 同步到远程目录,并删除远程目录中多余的文件。

rclone sync --interactive /home/local/directory remote:directory

匿名 FTP

当连接到允许匿名登录的 FTP 服务器时,你可以使用特殊的 “anonymous” 用户名。传统上,这个用户账户接受任何字符串作为密码,不过通常使用 “anonymous” 或 “guest” 作为密码。有些服务器要求使用有效的电子邮件地址作为密码。

使用 即时配置连接字符串 远程存储可以轻松访问此类服务器,而无需事先进行任何配置。以下是一些示例:

rclone lsf :ftp: --ftp-host=speedtest.tele2.net --ftp-user=anonymous --ftp-pass=$(rclone obscure dummy)
rclone lsf :ftp,host=speedtest.tele2.net,user=anonymous,pass=$(rclone obscure dummy):

上述示例在 Linux shell 和 PowerShell 中可以正常工作,但在 Windows 命令提示符中不行。它们会执行 rclone obscure 命令,以创建 pass 选项所需格式的密码字符串。以下示例与上述示例完全相同,只是使用了已经加密的相同密码 “dummy” 的字符串表示形式,因此即使在 Windows 命令提示符中也能正常工作:

rclone lsf :ftp: --ftp-host=speedtest.tele2.net --ftp-user=anonymous --ftp-pass=IXs2wc8OJOz7SYLBk47Ji1rHTmxM
rclone lsf :ftp,host=speedtest.tele2.net,user=anonymous,pass=IXs2wc8OJOz7SYLBk47Ji1rHTmxM:

隐式 TLS

Rclone FTP 支持隐式的基于 TLS 的 FTP 服务器(FTPS)。这需要在远程存储的 FTP 后端配置中启用,或者使用 --ftp-tls 参数。默认的 FTPS 端口是 990,而不是 21,可以使用 --ftp-port 参数进行设置。

受限文件名的字符

除了 默认的受限字符集 之外,以下字符也会被替换:

文件名不能以以下字符结尾。替换操作仅限于文件名的最后一个字符:

字符 编码值 替换字符
SP 0x20

并非所有的 FTP 服务器都允许文件名中包含所有字符,例如:

FTP 服务器 禁止的字符
proftpd *
pureftpd \ [ ]

此后端的交互式配置向导为主要的 FTP 服务器(ProFTPd、PureFTPd、VsFTPd)提供了合理的编码设置选项。当提示时,只需输入相应的选项编号即可。

标准选项

以下是 FTP 特定的标准选项。

–ftp-host

要连接的 FTP 主机。

例如 “ftp.example.com”。

属性:

  • 配置项:host
  • 环境变量:RCLONE_FTP_HOST
  • 类型:字符串
  • 是否必需:是

–ftp-user

FTP 用户名。

属性:

  • 配置项:user
  • 环境变量:RCLONE_FTP_USER
  • 类型:字符串
  • 默认值:"$USER"

–ftp-port

FTP 端口号。

属性:

  • 配置项:port
  • 环境变量:RCLONE_FTP_PORT
  • 类型:整数
  • 默认值:21

–ftp-pass

FTP 密码。

注意:输入此选项的值必须进行加密处理 - 请参阅 rclone obscure

属性:

  • 配置项:pass
  • 环境变量:RCLONE_FTP_PASS
  • 类型:字符串
  • 是否必需:否

–ftp-tls

使用隐式的 FTPS(基于 TLS 的 FTP)。

使用隐式的基于 TLS 的 FTP 时,客户端从一开始就使用 TLS 进行连接,这会破坏与不支持 TLS 的服务器的兼容性。通常通过端口 990 而不是端口 21 提供服务。不能与显式的 FTPS 同时使用。

属性:

  • 配置项:tls
  • 环境变量:RCLONE_FTP_TLS
  • 类型:布尔值
  • 默认值:false

–ftp-explicit-tls

使用显式的 FTPS(基于 TLS 的 FTP)。

使用显式的基于 TLS 的 FTP 时,客户端会明确向服务器请求安全连接,以便将明文连接升级为加密连接。不能与隐式的 FTPS 同时使用。

属性:

  • 配置项:explicit_tls
  • 环境变量:RCLONE_FTP_EXPLICIT_TLS
  • 类型:布尔值
  • 默认值:false

高级选项

以下是 FTP 特定的高级选项。

–ftp-concurrency

FTP 同时连接的最大数量,0 表示无限制。

请注意,设置此选项很可能会导致死锁,因此应谨慎使用。

如果你正在进行同步或复制操作,请确保并发数比 --transfers--checkers 的总和大 1。

如果你使用 --check-first,则只需要比 --checkers--transfers 中的最大值大 1 即可。

因此,对于 concurrency 3,你可以使用 --checkers 2 --transfers 2 --check-first--checkers 1 --transfers 1

属性:

  • 配置项:concurrency
  • 环境变量:RCLONE_FTP_CONCURRENCY
  • 类型:整数
  • 默认值:0

–ftp-no-check-certificate

不验证服务器的 TLS 证书。

属性:

  • 配置项:no_check_certificate
  • 环境变量:RCLONE_FTP_NO_CHECK_CERTIFICATE
  • 类型:布尔值
  • 默认值:false

–ftp-disable-epsv

即使服务器支持 EPSV 也禁用它。

属性:

  • 配置项:disable_epsv
  • 环境变量:RCLONE_FTP_DISABLE_EPSV
  • 类型:布尔值
  • 默认值:false

–ftp-disable-mlsd

即使服务器支持 MLSD 也禁用它。

属性:

  • 配置项:disable_mlsd
  • 环境变量:RCLONE_FTP_DISABLE_MLSD
  • 类型:布尔值
  • 默认值:false

–ftp-disable-utf8

即使服务器支持 UTF-8 也禁用它。

属性:

  • 配置项:disable_utf8
  • 环境变量:RCLONE_FTP_DISABLE_UTF8
  • 类型:布尔值
  • 默认值:false

–ftp-writing-mdtm

使用 MDTM 来设置修改时间(VsFtpd 的特殊处理)

属性:

  • 配置项:writing_mdtm
  • 环境变量:RCLONE_FTP_WRITING_MDTM
  • 类型:布尔值
  • 默认值:false

–ftp-force-list-hidden

使用 LIST -a 强制列出隐藏的文件和文件夹。这将禁用 MLSD 的使用。

属性:

  • 配置项:force_list_hidden
  • 环境变量:RCLONE_FTP_FORCE_LIST_HIDDEN
  • 类型:布尔值
  • 默认值:false

–ftp-idle-timeout

关闭空闲连接前的最长时间。

如果在给定的时间内没有连接返回到连接池,rclone 将清空连接池。

设置为 0 可无限期保留连接。

属性:

  • 配置项:idle_timeout
  • 环境变量:RCLONE_FTP_IDLE_TIMEOUT
  • 类型:时长
  • 默认值:1 分钟

–ftp-close-timeout

等待关闭响应的最长时间。

属性:

  • 配置项:close_timeout
  • 环境变量:RCLONE_FTP_CLOSE_TIMEOUT
  • 类型:时长
  • 默认值:1 分钟

–ftp-tls-cache-size

所有控制和数据连接的 TLS 会话缓存大小。

TLS 缓存允许恢复 TLS 会话并在连接之间重用预共享密钥(PSK)。如果默认大小不足以避免 TLS 恢复错误,请增大该值。默认启用。使用 0 可禁用。

属性:

  • 配置项:tls_cache_size
  • 环境变量:RCLONE_FTP_TLS_CACHE_SIZE
  • 类型:整数
  • 默认值:32

–ftp-disable-tls13

禁用 TLS 1.3(用于解决 TLS 有问题的 FTP 服务器的临时方案)

属性:

  • 配置项:disable_tls13
  • 环境变量:RCLONE_FTP_DISABLE_TLS13
  • 类型:布尔值
  • 默认值:false

–ftp-shut-timeout

等待数据连接关闭状态的最长时间。

属性:

  • 配置项:shut_timeout
  • 环境变量:RCLONE_FTP_SHUT_TIMEOUT
  • 类型:时长
  • 默认值:1 分钟

–ftp-ask-password

在需要时允许询问 FTP 密码。

如果设置了此选项且未提供密码,rclone 将询问密码。

属性:

  • 配置项:ask_password
  • 环境变量:RCLONE_FTP_ASK_PASSWORD
  • 类型:布尔值
  • 默认值:false

–ftp-socks-proxy

Socks 5 代理主机。

支持以下格式:user:pass@host:port、user@host:port、host:port。

示例:

myUser:myPass@localhost:9005

属性:

  • 配置项:socks_proxy
  • 环境变量:RCLONE_FTP_SOCKS_PROXY
  • 类型:字符串
  • 是否必需:否

–ftp-no-check-upload

不检查上传是否成功

通常,rclone 在上传文件后会尝试检查文件是否存在,以确保文件大小和修改时间符合预期。

此标志可阻止 rclone 进行这些检查。这允许上传到只写文件夹。

如果上传到只写文件夹,你可能还需要使用 --inplace 标志。

属性:

  • 配置项:no_check_upload
  • 环境变量:RCLONE_FTP_NO_CHECK_UPLOAD
  • 类型:布尔值
  • 默认值:false

–ftp-encoding

后端的编码方式。

有关更多信息,请参阅 概述中的编码部分

属性:

  • 配置项:encoding
  • 环境变量:RCLONE_FTP_ENCODING
  • 类型:编码方式
  • 默认值:Slash,Del,Ctl,RightSpace,Dot
  • 示例:
    • “Asterisk,Ctl,Dot,Slash”
      • ProFTPd 无法处理文件名中的 ‘*’
    • “BackSlash,Ctl,Del,Dot,RightSpace,Slash,SquareBracket”
      • PureFTPd 无法处理文件名中的 ‘[]’ 或 ‘*’
    • “Ctl,LeftPeriod,Slash”
      • VsFTPd 无法处理以点开头的文件名

–ftp-description

远程存储的描述。

属性:

  • 配置项:description
  • 环境变量:RCLONE_FTP_DESCRIPTION
  • 类型:字符串
  • 是否必需:否

限制

作为 rclone 远程存储的 FTP 服务器必须支持 被动 模式。该模式无法进行配置,因为 被动 模式是唯一受支持的模式。由于 其所使用的库不支持主动模式,rclone 的 FTP 实现与 主动 模式不兼容。出于安全考虑,主动模式可能永远不会得到支持。

rclone 的 FTP 后端不支持任何校验和,但可以比较文件大小。

FTP 后端不支持 rclone about 命令。不具备此功能的后端无法确定 rclone 挂载点的可用空间,也不能在 rclone 联合远程存储中使用 mfs(最大可用空间)策略。

请参阅 不支持 rclone about 的后端列表rclone about

用于调试的 --dump headers--dump bodies--dump auth 实现与基于 HTTP 的 rclone 后端不同,其控制粒度较低。

不支持 --timeout(但支持 --contimeout)。

不支持 --bind

rclone 的 FTP 后端理论上可以支持服务器端移动,但目前尚未实现。

目前不支持 ftp_proxy 环境变量。

修改时间

主要的 FTP 服务器(ProFTPd、PureFTPd、VsFTPd 和 FileZilla FTP 服务器)支持精确到 1 秒的文件修改时间(时间戳)。VsFTPd 服务器对与时间相关的协议命令有非标准的实现,需要进行特殊配置:writing_mdtm = true

对于其他 FTP 服务器,对精确文件时间的支持情况取决于它们所宣传的协议扩展。如果同时存在 MLSDMDTMMFTM 扩展,rclone 将综合使用这些扩展来提供精确的时间。否则,你通过 rclone 在 FTP 服务器上看到的时间将是文件最后一次上传的时间。

你可以使用以下命令检查 rclone 是否能与你的 FTP 服务器配合使用精确时间:rclone backend features your_ftp_remote:(末尾的冒号很重要)。查看 Precision 标签行中的数字,该数字表示远程时间精度,以纳秒为单位。值为 1000000000 表示文件时间精度可达 1 秒。值为 3153600000000000000(或其他较大数字)表示“不支持”。