SFTP
SFTP 即 安全(或 SSH)文件传输协议。
SFTP 基于 SSH v2 运行,并且在大多数现代 SSH 安装中作为标准组件安装。
路径的指定格式为 remote:path
。如果路径不以 /
开头,则它相对于用户的主目录。空路径 remote:
指的是用户的主目录。例如,rclone lsd remote:
会列出 rclone 远程配置中所配置用户的主目录(即 /home/sftpuser
)。然而,rclone lsd remote:/
会列出远程机器的根目录(即 /
)。
请注意,一些 SFTP 服务器需要使用前导 /
,Synology 就是一个典型的例子。另一方面,rsync.net 和 Hetzner 则要求用户省略前导 /
。
请注意,默认情况下 rclone 会尝试在服务器上执行 shell 命令,请参阅 shell 访问注意事项。
配置
以下是一个创建 SFTP 配置的示例。首先运行:
rclone config
这将引导你完成一个交互式的设置过程。
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 / SSH/SFTP
\ "sftp"
[snip]
Storage> sftp
SSH host to connect to
Choose a number from below, or type in your own value
1 / Connect to example.com
\ "example.com"
host> example.com
SSH username
Enter a string value. Press Enter for the default ("$USER").
user> sftpuser
SSH port number
Enter a signed integer. Press Enter for the default (22).
port>
SSH password, leave blank to use ssh-agent.
y) Yes type in my own password
g) Generate random password
n) No leave this optional password blank
y/g/n> n
Path to unencrypted PEM-encoded private key file, leave blank to use ssh-agent.
key_file>
Remote config
Configuration complete.
Options:
- type: sftp
- host: example.com
- user: sftpuser
- port:
- pass:
- key_file:
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 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
将远程路径 /srv/www-data/
挂载到本地路径 /mnt/www-data
rclone mount remote:/srv/www-data/ /mnt/www-data
SSH 认证
SFTP 远程存储支持三种认证方法:
- 密码
- 密钥文件,包括证书签名密钥
- ssh 代理
密钥文件应为 PEM 编码的私钥文件。例如 /home/$USER/.ssh/id_rsa
。
仅支持未加密的 OpenSSH 或 PEM 加密文件。
密钥文件可以指定为外部文件(key_file
),也可以包含在 rclone 配置文件(key_pem
)中。如果在配置文件中使用 key_pem
,则条目应在一行上,并用换行符(\n
或 \r\n
)分隔各行。即:
key_pem = -----BEGIN RSA PRIVATE KEY-----\nMaMbaIXtE\n0gAMbMbaSsd\nMbaass\n-----END RSA PRIVATE KEY-----
可以使用以下命令为配置文件中的 key_pem
生成正确的格式:
awk '{printf "%s\\n", $0}' < ~/.ssh/id_rsa
如果不指定 pass
、key_file
、key_pem
或 ask_password
,则 rclone 将尝试联系 ssh 代理。你也可以指定 key_use_agent
来强制使用 ssh 代理。在这种情况下,还可以指定 key_file
或 key_pem
来强制使用 ssh 代理中的特定密钥。
目前,使用 ssh 代理是加载加密 OpenSSH 密钥的唯一方法。
如果设置了 ask_password
选项,当需要密码且未配置密码时,rclone 将提示输入密码。
证书签名密钥
在传统的基于密钥的认证中,你只需配置私钥,内置的公钥将在认证过程中使用。
如果你有证书,可以使用它对公钥进行签名,创建一个单独的 SSH 用户证书,该证书应替代从私钥中提取的普通公钥使用。然后,你必须在 pubkey_file
中提供用户证书公钥文件的路径,或者在 pubkey
中提供文件内容。
注意:这不是与私钥配对的传统公钥,通常保存为 /home/$USER/.ssh/id_rsa.pub
。在 pubkey_file
中设置此路径将不起作用。
示例:
[remote]
type = sftp
host = example.com
user = sftpuser
key_file = ~/id_rsa
pubkey_file = ~/id_rsa-cert.pub
如果将证书与私钥合并,则可在两处指定 合并文件。
注意:证书必须放在文件的第一位。
cat id_rsa-cert.pub id_rsa > merged_key
主机密钥验证
默认情况下,rclone 不会检查服务器的主机密钥进行验证。这可能会让攻击者用自己的服务器替换掉目标服务器,如果你使用密码认证,就可能导致密码泄露。
可以通过启用 known_hosts_file
选项来开启使用标准 known_hosts
文件进行主机密钥匹配。该选项可以指向 OpenSSH
维护的文件,也可以指向一个自定义文件。
例如,使用 OpenSSH 的 known_hosts
文件:
[remote]
type = sftp
host = example.com
user = sftpuser
pass =
known_hosts_file = ~/.ssh/known_hosts
或者,您也可以像这样创建自己的已知主机文件:
ssh-keyscan -t dsa,rsa,ecdsa,ed25519 example.com >> known_hosts
主机密钥验证存在一些限制:
rclone
不会为你管理known_hosts
文件。如果密钥缺失或错误,连接将被拒绝。- 如果服务器配置了证书主机密钥,那么
known_hosts
文件中的条目必须是 CA 的@cert-authority
条目。
如果服务器提供的主机密钥与文件中的密钥不匹配(或缺失),连接将被中止,并返回如下错误:
NewFs: couldn't connect SSH: ssh: handshake failed: knownhosts: key mismatch
或者
NewFs: couldn't connect SSH: ssh: handshake failed: knownhosts: key is unknown
如果你看到如下错误:
NewFs: couldn't connect SSH: ssh: handshake failed: ssh: no authorities for hostname: example.com:22
那么很可能是服务器提供了一个由 CA 签名的主机证书,你需要添加相应的 @cert-authority
条目。
known_hosts_file
设置可以在 rclone config
过程中作为高级选项进行设置。
macOS 上的 ssh-agent
请注意,由于 macOS 操作系统的近期更改,使用 ssh-agent 似乎存在各种问题。最有效的解决方法似乎是在每个会话中启动一个 ssh-agent,例如:
eval `ssh-agent -s` && ssh-add -A
然后在会话结束时:
eval `ssh-agent -k`
当然,这些命令也可以在脚本中使用。
远程 shell 访问
SFTP 后端的某些功能依赖于远程 shell 访问以及执行命令的能力。这包括校验和功能,在某些情况下还包括 about 命令。不同类型的 shell 执行的命令可能不同,并且包含特殊字符的文件路径参数的引号和转义规则也可能不同。因此,rclone 需要知道使用的是哪种 shell,以及是否可以进行 shell 访问。
大多数服务器运行在某种版本的 Unix 系统上,此时可以默认使用基本的 Unix shell,无需进一步区分。Windows 10、Server 2019 及更高版本也可以运行 SSH 服务器,这是 OpenSSH 的一个移植版本(请参阅官方 安装指南)。在 Windows 服务器上,shell 处理方式有所不同:虽然也可以配置为使用 Unix 类型的 shell,例如 Cygwin bash,但默认情况下使用的是 Windows 命令提示符(cmd.exe),并且 PowerShell 是推荐的替代方案。所有这些 shell 的行为都不同,rclone 必须能够处理这些差异。
当你首次访问 SFTP 远程存储时,rclone 会尝试自动检测服务器上使用的 shell 类型。如果成功创建了远程 shell 会话,它会查找是否为 CMD 或 PowerShell 的迹象,如果未检测到其他类型,则默认使用 Unix shell。如果甚至无法创建远程 shell 会话,则将完全禁用 shell 命令执行。检测结果将存储在 SFTP 远程配置的 shell_type
选项中,因此自动检测只需执行一次。如果你在首次运行之前手动设置了该选项的值,将跳过自动检测;如果之后设置了不同的值,将覆盖现有的设置。可以将值设置为 none
以避免尝试执行任何 shell 命令,例如,如果服务器不允许这样做。
如果配置中设置了 shell_type = none
,则不能设置 ssh。
当服务器是 rclone serve sftp 时,rclone 的 SFTP 远程存储会将其检测为 Unix 类型的 shell —— 即使它运行在 Windows 上。这个服务器实际上没有 shell,但它接受与 SFTP 后端依赖的 Unix shell 特定命令相匹配的输入命令,例如 md5sum
和 df
。此外,它还处理 Unix shell 使用的字符串转义规则。因此,从 SFTP 远程存储的角度将其视为 Unix 类型的 shell 始终是正确的,并且支持所有功能。
远程 shell 访问注意事项
上述 shell 类型自动检测逻辑意味着,默认情况下,rclone 在首次访问新的 SFTP 远程存储时会尝试运行一个 shell 命令。如果你在没有配置文件的情况下配置 SFTP 远程存储,例如即时配置的远程存储,rclone 将无处存储检测结果,并且每次访问时都会重新运行该命令。为避免这种情况,你应该明确将 shell_type
选项设置为正确的值,或者如果希望阻止 rclone 执行任何远程 shell 命令,则将其设置为 none
。
还需要注意的是,由于 shell 类型决定了作为命令行参数的文件路径如何进行引号和转义,配置错误的 shell 类型可能会使你面临命令注入漏洞的风险。请务必确认自动检测的 shell 类型,或者明确设置你知道正确的 shell 类型,或者在确定之前禁用 shell 访问。
校验和
SFTP 本身不支持校验和(文件哈希),但如果相同的登录账户具有 shell 访问权限,并且可以执行远程命令,rclone 就能够使用校验和功能。如果远程系统上有可以计算兼容校验和的命令,那么每当需要校验和时,rclone 就可以配置为执行该命令,并读取结果。目前支持 MD5 和 SHA-1 校验和。
通常,这需要服务器上有可用的外部工具。默认情况下,rclone 会尝试使用 md5sum
、md5
和 rclone md5sum
命令来计算 MD5 校验和,并选择第一个可用的命令。对于 SHA-1 校验和,会尝试使用 sha1sum
、sha1
和 rclone sha1sum
命令。这些工具通常需要在远程系统的 PATH
中才能被找到。
在某些情况下,shell 本身就能够计算校验和。PowerShell 就是这样的一个例子。如果 rclone 检测到远程 shell 是 PowerShell(这很可能意味着是一个 Windows OpenSSH 服务器),并且没有找到外部的校验和命令,rclone 将使用预定义的脚本块来生成校验和(请参阅 远程 shell 访问)。这假设使用的是 PowerShell 4.0 或更高版本。
md5sum_command
和 sha1_command
选项可用于自定义计算校验和时要执行的命令。例如,你可以设置 md5sum
和 sha1sum
可执行文件的特定路径,或者使用它们来指定其他以兼容格式输出校验和的工具。该值可以包含命令行参数,甚至可以像 PowerShell 那样包含 shell 脚本块。rclone 有 md5sum 和 sha1sum 子命令,它们使用兼容的格式,这意味着如果你在服务器上有 rclone 可执行文件,就可以使用它。如前所述,如果在 PATH
中找到这些命令,rclone 会自动选择它们,但如果没有找到,你可以将 /path/to/rclone md5sum
设置为 md5sum_command
选项的值,以确保使用特定的可执行文件。
建议启用远程校验和功能,并且默认情况下是启用的。当 rclone 首次使用 SFTP 远程存储时,如果没有设置 md5sum_command
或 sha1_command
选项,它会检查上述每个选项的默认命令是否可用。检测结果将保存在远程配置中,下次使用时将直接使用相同的命令。如果没有一个默认命令可用于特定的算法,将设置值为 none
,并且该远程存储将不支持该算法。
如果你连接的 SFTP 服务器不受你控制,并且禁止执行远程 shell 命令,则可能需要禁用校验和功能。将配置选项 disable_hashcheck
设置为 true
可以完全禁用校验和功能,或者将 shell_type
设置为 none
可以禁用所有基于远程 shell 命令执行的功能。
修改时间和哈希值
修改时间以 1 秒的精度存储在服务器上。
修改时间在同步过程中会被使用,并且完全支持。
某些 SFTP 服务器在文件上传后会禁用设置/修改文件修改时间的功能(例如,某些配置了 mod_sftp
的 ProFTPd 服务器)。如果你使用的是这样的服务器,可以在 RClone 后端配置中设置 set_modtime = false
来禁用此行为。
about 命令
about
命令返回远程存储上指定路径所在磁盘的总空间、可用空间和已使用空间;如果未指定路径,则返回远程存储根目录所在磁盘的相关信息。
SFTP 通常支持 about 命令,但这取决于服务器。如果服务器实现了特定于供应商的 VFS 统计扩展(OpenSSH 实例通常会实现),则会使用该扩展。如果没有实现,但相同的登录账户可以访问 Unix shell,并且 df
命令可用(例如在远程系统的 PATH
中),则会使用该命令。如果服务器的 shell 是 PowerShell(可能是 Windows OpenSSH 服务器),rclone 将使用内置的 shell 命令(请参阅 远程 shell 访问)。如果以上条件都不满足,about
命令将失败。
标准选项
以下是 SFTP(SSH/SFTP)特有的标准选项。
–sftp-host
要连接的 SSH 主机。
例如:“example.com”。
属性:
- 配置项:host
- 环境变量:RCLONE_SFTP_HOST
- 类型:字符串
- 是否必需:是
–sftp-user
SSH 用户名。
属性:
- 配置项:user
- 环境变量:RCLONE_SFTP_USER
- 类型:字符串
- 默认值:"$USER"
–sftp-port
SSH 端口号。
属性:
- 配置项:port
- 环境变量:RCLONE_SFTP_PORT
- 类型:整数
- 默认值:22
–sftp-pass
SSH 密码,留空则使用 ssh-agent。
注意:输入此选项的值必须进行加密处理 - 请参阅 rclone obscure。
属性:
- 配置项:pass
- 环境变量:RCLONE_SFTP_PASS
- 类型:字符串
- 是否必需:否
–sftp-key-pem
原始 PEM 编码的私钥。
请注意,这应该是一行字符串,行尾用 \n
替换,例如:
key_pem = -----BEGIN RSA PRIVATE KEY-----\nMaMbaIXtE\n0gAMbMbaSsd\nMbaass\n-----END RSA PRIVATE KEY-----
可以使用以下命令正确生成单行字符串:
awk '{printf "%s\\n", $0}' < ~/.ssh/id_rsa
如果指定了此选项,它将覆盖 key_file
参数。
属性:
- 配置项:key_pem
- 环境变量:RCLONE_SFTP_KEY_PEM
- 类型:字符串
- 是否必需:否
–sftp-key-file
PEM 编码的私钥文件的路径。
留空或设置 key-use-agent
以使用 ssh-agent。
文件名中的前导 ~
以及环境变量(如 ${RCLONE_CONFIG_DIR}
)将被展开。
属性:
- 配置项:key_file
- 环境变量:RCLONE_SFTP_KEY_FILE
- 类型:字符串
- 是否必需:否
–sftp-key-file-pass
用于解密 PEM 编码私钥文件的密码短语。
仅支持 PEM 加密的密钥文件(旧的 OpenSSH 格式)。不支持新 OpenSSH 格式的加密密钥。
注意:输入此选项的值必须进行加密处理 - 请参阅 rclone obscure。
属性:
- 配置项:key_file_pass
- 环境变量:RCLONE_SFTP_KEY_FILE_PASS
- 类型:字符串
- 是否必需:否
–sftp-pubkey
用于基于公共证书认证的 SSH 公共证书。
如果你有用于认证的签名证书,请设置此选项。
如果指定了此选项,它将覆盖 pubkey_file
。
属性:
- 配置项:pubkey
- 环境变量:RCLONE_SFTP_PUBKEY
- 类型:字符串
- 是否必需:否
–sftp-pubkey-file
可选的公钥文件路径。 如果你有用于认证的签名证书,请设置此选项。
文件名中的前导 ~
以及环境变量(如 ${RCLONE_CONFIG_DIR}
)将被展开。
属性:
- 配置项:pubkey_file
- 环境变量:RCLONE_SFTP_PUBKEY_FILE
- 类型:字符串
- 是否必需:否
–sftp-key-use-agent
设置此选项将强制使用 ssh-agent。
当同时设置了 key-file
时,将读取指定密钥文件的 .pub
文件,并仅从 ssh-agent 请求关联的密钥。这可以避免在 ssh-agent 包含多个密钥时出现 Too many authentication failures for *username*
错误。
属性:
- 配置项:key_use_agent
- 环境变量:RCLONE_SFTP_KEY_USE_AGENT
- 类型:布尔值
- 默认值:false
–sftp-use-insecure-cipher
启用使用不安全的加密算法和密钥交换方法。
这将启用使用以下不安全的加密算法和密钥交换方法:
- aes128-cbc
- aes192-cbc
- aes256-cbc
- 3des-cbc
- diffie-hellman-group-exchange-sha256
- diffie-hellman-group-exchange-sha1
这些算法不安全,攻击者可能会恢复明文数据。
如果你使用了 ciphers
或 key_exchange
高级选项,则此选项必须为 false
。
属性:
- 配置项:use_insecure_cipher
- 环境变量:RCLONE_SFTP_USE_INSECURE_CIPHER
- 类型:布尔值
- 默认值:false
- 示例:
- “false”
- 使用默认的加密算法列表。
- “true”
- 启用使用 aes128-cbc 加密算法以及 diffie-hellman-group-exchange-sha256、diffie-hellman-group-exchange-sha1 密钥交换方法。
- “false”
–sftp-disable-hashcheck
禁用执行 SSH 命令以确定远程文件哈希是否可用。
留空或设置为 false
以启用哈希功能(推荐),设置为 true
以禁用哈希功能。
属性:
- 配置项:disable_hashcheck
- 环境变量:RCLONE_SFTP_DISABLE_HASHCHECK
- 类型:布尔值
- 默认值:false
–sftp-ssh
外部 ssh 二进制文件的路径和参数。
通常,rclone 将使用其内部的 ssh 库来连接到 SFTP 服务器。但是,它没有实现所有可能的 ssh 选项,因此可能需要使用外部的 ssh 二进制文件。
如果你使用此选项,rclone 将忽略所有内部配置,并期望你使用用户/主机/端口以及任何其他所需的选项来配置 ssh 二进制文件。
重要提示:ssh 命令必须无需密码即可登录,因此需要使用密钥或证书进行配置。
rclone 将运行提供的命令,并附加额外的参数 -s sftp
以访问 SFTP 子系统,或者附加诸如 "md5sum /path/to/file"
之类的命令以读取校验和。
任何包含空格的参数都应该用双引号括起来。
一个示例设置可能是:
ssh -o ServerAliveInterval=20 [email protected]
请注意,当使用外部 ssh 二进制文件时,rclone 会为每次计算哈希值建立一个新的 ssh 连接。
属性:
- 配置项:ssh
- 环境变量:RCLONE_SFTP_SSH
- 类型:以空格分隔的列表
- 默认值:无
高级选项
以下是 SFTP(SSH/SFTP)特有的高级选项。
–sftp-known-hosts-file
可选的 known_hosts
文件路径。
设置此值以启用服务器主机密钥验证。
文件名中的前导 ~
以及环境变量(如 ${RCLONE_CONFIG_DIR}
)将被展开。
属性:
- 配置项:known_hosts_file
- 环境变量:RCLONE_SFTP_KNOWN_HOSTS_FILE
- 类型:字符串
- 是否必需:否
- 示例:
- “~/.ssh/known_hosts”
- 使用 OpenSSH 的
known_hosts
文件。
- 使用 OpenSSH 的
- “~/.ssh/known_hosts”
–sftp-ask-password
允许在需要时询问 SFTP 密码。
如果设置了此选项且未提供密码,则 rclone 将:
- 提示输入密码
- 不联系 ssh 代理
属性:
- 配置项:ask_password
- 环境变量:RCLONE_SFTP_ASK_PASSWORD
- 类型:布尔值
- 默认值:false
–sftp-path-override
覆盖 SSH shell 命令使用的路径。
当 SFTP 和 SSH 路径不同时,这允许进行校验和计算。此问题尤其影响 Synology NAS 设备。
例如,如果共享文件夹位于表示卷的目录中:
rclone sync /home/local/directory remote:/directory --sftp-path-override /volume2/directory
例如,如果主目录位于名为 “home” 的共享文件夹中:
rclone sync /home/local/directory remote:/home/directory --sftp-path-override /volume1/homes/USER/directory
若要仅指定 SFTP 远程存储的根路径,并允许 rclone 自动添加任何相对子路径(包括必要时展开/解密远程存储),请在路径开头添加 @
字符。
例如,上述第一个示例可以改写为:
rclone sync /home/local/directory remote:/directory --sftp-path-override @/volume2
请注意,在使用此方法处理 Synology “home” 文件夹时,应指定完整的 "/homes/USER"
路径,而不是 "/home"
。
例如,上述第二个示例应改写为:
rclone sync /home/local/directory remote:/homes/USER/directory --sftp-path-override @/volume1
属性:
- 配置项:path_override
- 环境变量:RCLONE_SFTP_PATH_OVERRIDE
- 类型:字符串
- 是否必需:否
–sftp-set-modtime
如果设置,则在远程存储上设置修改时间。
属性:
- 配置项:set_modtime
- 环境变量:RCLONE_SFTP_SET_MODTIME
- 类型:布尔值
- 默认值:true
–sftp-shell-type
远程服务器上的 SSH shell 类型(如果有)。
留空以自动检测。
属性:
- 配置项:shell_type
- 环境变量:RCLONE_SFTP_SHELL_TYPE
- 类型:字符串
- 是否必需:否
- 示例:
- “none”
- 无 shell 访问权限
- “unix”
- Unix shell
- “powershell”
- PowerShell
- “cmd”
- Windows 命令提示符
- “none”
–sftp-md5sum-command
用于读取 MD5 哈希值的命令。
留空以自动检测。
属性:
- 配置项:md5sum_command
- 环境变量:RCLONE_SFTP_MD5SUM_COMMAND
- 类型:字符串
- 是否必需:否
–sftp-sha1sum-command
用于读取 SHA-1 哈希值的命令。
留空以自动检测。
属性:
- 配置项:sha1sum_command
- 环境变量:RCLONE_SFTP_SHA1SUM_COMMAND
- 类型:字符串
- 是否必需:否
–sftp-skip-links
设置为跳过任何符号链接和其他非常规文件。
属性:
- 配置项:skip_links
- 环境变量:RCLONE_SFTP_SKIP_LINKS
- 类型:布尔值
- 默认值:false
–sftp-subsystem
指定远程主机上的 SSH2 子系统。
属性:
- 配置项:subsystem
- 环境变量:RCLONE_SFTP_SUBSYSTEM
- 类型:字符串
- 默认值:“sftp”
–sftp-server-command
指定在远程主机上运行 sftp 服务器的路径或命令。
当定义了 server_command
时,将忽略 subsystem
选项。
如果在配置文件中添加 server_command
,请注意不要将其用引号括起来,否则会导致 rclone 失败。
一个有效的示例如下:
[remote_name]
type = sftp
server_command = sudo /usr/libexec/openssh/sftp-server
属性:
- 配置项:server_command
- 环境变量:RCLONE_SFTP_SERVER_COMMAND
- 类型:字符串
- 是否必需:否
–sftp-use-fstat
如果设置,则使用 fstat
而不是 stat
。
某些服务器限制打开文件的数量,在打开文件后调用 Stat
会导致服务器返回错误。设置此标志将调用 Fstat
而不是 Stat
,Fstat
是在已打开的文件句柄上调用的。
已经发现,对于将 “extractability” 级别设置为 1(即任何时候只能打开 1 个文件)的 IBM Sterling SFTP 服务器,此设置会有所帮助。
属性:
- 配置项:use_fstat
- 环境变量:RCLONE_SFTP_USE_FSTAT
- 类型:布尔值
- 默认值:false
–sftp-disable-concurrent-reads
如果设置,则不使用并发读取。
通常,并发读取是安全的,不使用它们会降低性能,因此此选项默认禁用。
某些服务器限制文件的下载次数。使用并发读取可能会触发此限制,因此如果你的服务器返回以下错误:
Failed to copy: file does not exist
那么你可能需要启用此标志。
如果禁用了并发读取,则会忽略 use_fstat
选项。
属性:
- 配置项:disable_concurrent_reads
- 环境变量:RCLONE_SFTP_DISABLE_CONCURRENT_READS
- 类型:布尔值
- 默认值:false
–sftp-disable-concurrent-writes
如果设置,则不使用并发写入。
通常,rclone 使用并发写入来上传文件。这大大提高了性能,特别是对于远程服务器。
如果需要,可以使用此选项禁用并发写入。
属性:
- 配置项:disable_concurrent_writes
- 环境变量:RCLONE_SFTP_DISABLE_CONCURRENT_WRITES
- 类型:布尔值
- 默认值:false
–sftp-idle-timeout
空闲连接关闭前的最大时间。
如果在给定时间内没有连接返回到连接池,rclone 将清空连接池。
设置为 0 可无限期保持连接。
属性:
- 配置项:idle_timeout
- 环境变量:RCLONE_SFTP_IDLE_TIMEOUT
- 类型:持续时间
- 默认值:1 分钟
–sftp-chunk-size
上传和下载的块大小。
这控制了 SFTP 协议数据包中有效负载的最大大小。RFC 将此限制为 32768 字节(32k),这是默认值。然而,许多服务器支持更大的大小,通常限制为最大总数据包大小 256k,在高延迟链接上设置更大的值将显著提高传输速度。这包括 OpenSSH,例如,使用 255k 的值效果很好,在仍处于 256k 总数据包大小范围内的同时,还为开销留出了足够的空间。
在使用高于 32k 的值之前,请务必进行充分测试,并且仅在始终连接到同一服务器或经过充分广泛测试后才使用。如果在复制较大文件时遇到诸如 “failed to send packet payload: EOF”、大量 “connection lost” 或 “corrupted on transfer” 等错误,请尝试降低此值。由 rclone serve sftp 运行的服务器发送的数据包最大有效负载为标准的 32k,因此在下载文件时不能设置不同的 chunk_size
,但它接受最大总大小为 256k 的数据包,因此在上传时可以像 OpenSSH 示例一样设置 chunk_size
。
属性:
- 配置项:chunk_size
- 环境变量:RCLONE_SFTP_CHUNK_SIZE
- 类型:大小后缀
- 默认值:32Ki
–sftp-concurrency
单个文件的最大未完成请求数。
这控制了单个文件的最大未完成请求数。增加此值将在高延迟链接上提高吞吐量,但会消耗更多内存。
属性:
- 配置项:concurrency
- 环境变量:RCLONE_SFTP_CONCURRENCY
- 类型:整数
- 默认值:64
–sftp-connections
SFTP 同时连接的最大数量,0 表示无限制。
请注意,设置此值很可能会导致死锁,因此应谨慎使用。
如果你正在进行同步或复制操作,请确保 connections
的值比 --transfers
和 --checkers
的总和大 1。
如果你使用 --check-first
,则只需确保 connections
的值比 --checkers
和 --transfers
中的最大值大 1。
因此,对于 connections 3
,你可以使用 --checkers 2 --transfers 2 --check-first
或 --checkers 1 --transfers 1
。
属性:
- 配置项:connections
- 环境变量:RCLONE_SFTP_CONNECTIONS
- 类型:整数
- 默认值:0
–sftp-set-env
传递给 sftp 和命令的环境变量。
以以下形式设置环境变量:
VAR=value
以传递给 sftp 客户端和运行的任何命令(例如 md5sum
)。
多个变量用空格分隔,例如:
VAR1=value VAR2=value
包含空格的变量用引号括起来,例如:
"VAR3=value with space" "VAR4=value with space" VAR5=nospacehere
属性:
- 配置项:set_env
- 环境变量:RCLONE_SFTP_SET_ENV
- 类型:以空格分隔的列表
- 默认值:无
–sftp-ciphers
按优先级排序的用于会话加密的加密算法列表,以空格分隔。
至少有一个算法必须与服务器配置匹配。例如,可以使用 ssh -Q cipher
来检查。
如果 use_insecure_cipher
为 true
,则不能设置此选项。
示例:
aes128-ctr aes192-ctr aes256-ctr [email protected] [email protected]
属性:
- 配置项:ciphers
- 环境变量:RCLONE_SFTP_CIPHERS
- 类型:以空格分隔的列表
- 默认值:无
–sftp-key-exchange
按优先级排序的密钥交换算法列表,以空格分隔。
至少有一个算法必须与服务器配置匹配。例如,可以使用 ssh -Q kex
来检查。
如果 use_insecure_cipher
为 true
,则不能设置此选项。
示例:
[email protected] curve25519-sha256 [email protected] ecdh-sha2-nistp256
属性:
- 配置项:key_exchange
- 环境变量:RCLONE_SFTP_KEY_EXCHANGE
- 类型:以空格分隔的列表
- 默认值:无
–sftp-macs
按优先级排序的 MAC(消息认证码)算法列表,以空格分隔。
至少有一个算法必须与服务器配置匹配。例如,可以使用 ssh -Q mac
来检查。
示例:
[email protected] [email protected] [email protected]
属性:
- 配置项:macs
- 环境变量:RCLONE_SFTP_MACS
- 类型:以空格分隔的列表
- 默认值:无
–sftp-host-key-algorithms
按优先级排序的主机密钥算法列表,以空格分隔。
至少有一个算法必须与服务器配置匹配。例如,可以使用 ssh -Q HostKeyAlgorithms
来检查。
注意:即使未启用服务器主机密钥验证,这也可能会影响与服务器的密钥协商结果。
示例:
ssh-ed25519 ssh-rsa ssh-dss
属性:
- 配置项:host_key_algorithms
- 环境变量:RCLONE_SFTP_HOST_KEY_ALGORITHMS
- 类型:以空格分隔的列表
- 默认值:无
–sftp-socks-proxy
Socks 5 代理主机。
支持 user:pass@host:port
、user@host:port
、host:port
格式。
示例:
myUser:myPass@localhost:9005
属性:
- 配置项:socks_proxy
- 环境变量:RCLONE_SFTP_SOCKS_PROXY
- 类型:字符串
- 是否必需:否
–sftp-copy-is-hardlink
设置为启用使用硬链接进行服务器端复制。
SFTP 协议未定义复制命令,因此通常 sftp 后端不允许进行服务器端复制。
然而,SFTP 协议支持硬链接,如果你启用此标志,sftp 后端将支持服务器端复制。这些复制将通过从源文件创建硬链接到目标文件来实现。
并非所有 sftp 服务器都支持此功能。
请注意,将两个文件硬链接在一起不会占用额外的空间,因为源文件和目标文件将是同一个文件。
此功能对于使用 --copy-dest
进行备份可能很有用。
属性:
- 配置项:copy_is_hardlink
- 环境变量:RCLONE_SFTP_COPY_IS_HARDLINK
- 类型:布尔值
- 默认值:false
–sftp-description
远程存储的描述。
属性:
- 配置项:description
- 环境变量:RCLONE_SFTP_DESCRIPTION
- 类型:字符串
- 是否必需:否
限制
在某些 SFTP 服务器(例如 Synology)上,SSH 和 SFTP 的路径不同,因此无法正确计算哈希值。你可以使用 --sftp-path-override
或 disable_hashcheck
选项。
Windows 系统下仅支持 Putty 的 Pageant 作为 ssh 代理。
由于安全考虑,Go SSH 库默认禁用了 aes128-cbc
加密算法的使用。可以通过在配置文件中将 use_insecure_cipher
设置为 true
,在每个连接的基础上重新启用该算法。有关此加密算法不安全的更多详细信息,请参阅 本文。
在 此问题 解决之前,Plan9 系统不支持 SFTP。
请注意,由于 SFTP 不是基于 HTTP 的,因此以下标志对其无效:--dump-headers
、--dump-bodies
、--dump-auth
。
请注意,--timeout
和 --contimeout
标志均受支持。
rsync.net
rsync.net 支持通过 SFTP 后端进行连接。
Hetzner Storage Box
Hetzner Storage Box 支持通过端口 23 的 SFTP 后端进行连接。