FTP
FTP 即文件传输协议。Rclone 对 FTP 的支持是通过 github.com/jlaffaye/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 无法处理以点开头的文件名
- “Asterisk,Ctl,Dot,Slash”
–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 服务器,对精确文件时间的支持情况取决于它们所宣传的协议扩展。如果同时存在 MLSD
、MDTM
和 MFTM
扩展,rclone 将综合使用这些扩展来提供精确的时间。否则,你通过 rclone 在 FTP 服务器上看到的时间将是文件最后一次上传的时间。
你可以使用以下命令检查 rclone 是否能与你的 FTP 服务器配合使用精确时间:rclone backend features your_ftp_remote:
(末尾的冒号很重要)。查看 Precision
标签行中的数字,该数字表示远程时间精度,以纳秒为单位。值为 1000000000
表示文件时间精度可达 1 秒。值为 3153600000000000000
(或其他较大数字)表示“不支持”。