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 密钥交换方法。

–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 文件。

–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 命令提示符

–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 后端进行连接。

请参阅 rsync.net 的 rclone 示例文档。

Hetzner Storage Box

Hetzner Storage Box 支持通过端口 23 的 SFTP 后端进行连接。

请参阅 Hetzner 的文档以获取详细信息