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

如果不指定 passkey_filekey_pemask_password,则 rclone 将尝试联系 ssh 代理。你也可以指定 key_use_agent 来强制使用 ssh 代理。在这种情况下,还可以指定 key_filekey_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 特定命令相匹配的输入命令,例如 md5sumdf。此外,它还处理 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 会尝试使用 md5summd5rclone md5sum 命令来计算 MD5 校验和,并选择第一个可用的命令。对于 SHA-1 校验和,会尝试使用 sha1sumsha1rclone sha1sum 命令。这些工具通常需要在远程系统的 PATH 中才能被找到。

在某些情况下,shell 本身就能够计算校验和。PowerShell 就是这样的一个例子。如果 rclone 检测到远程 shell 是 PowerShell(这很可能意味着是一个 Windows OpenSSH 服务器),并且没有找到外部的校验和命令,rclone 将使用预定义的脚本块来生成校验和(请参阅 远程 shell 访问)。这假设使用的是 PowerShell 4.0 或更高版本。

md5sum_commandsha1_command 选项可用于自定义计算校验和时要执行的命令。例如,你可以设置 md5sumsha1sum 可执行文件的特定路径,或者使用它们来指定其他以兼容格式输出校验和的工具。该值可以包含命令行参数,甚至可以像 PowerShell 那样包含 shell 脚本块。rclone 有 md5sumsha1sum 子命令,它们使用兼容的格式,这意味着如果你在服务器上有 rclone 可执行文件,就可以使用它。如前所述,如果在 PATH 中找到这些命令,rclone 会自动选择它们,但如果没有找到,你可以将 /path/to/rclone md5sum 设置为 md5sum_command 选项的值,以确保使用特定的可执行文件。

建议启用远程校验和功能,并且默认情况下是启用的。当 rclone 首次使用 SFTP 远程存储时,如果没有设置 md5sum_commandsha1_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

这些算法不安全,攻击者可能会恢复明文数据。

如果你使用了 cipherskey_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 而不是 StatFstat 是在已打开的文件句柄上调用的。

已经发现,对于将 “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_ciphertrue,则不能设置此选项。

示例:

aes128-ctr aes192-ctr aes256-ctr [email protected] [email protected]

属性:

  • 配置项:ciphers
  • 环境变量:RCLONE_SFTP_CIPHERS
  • 类型:以空格分隔的列表
  • 默认值:无

–sftp-key-exchange

按优先级排序的密钥交换算法列表,以空格分隔。

至少有一个算法必须与服务器配置匹配。例如,可以使用 ssh -Q kex 来检查。

如果 use_insecure_ciphertrue,则不能设置此选项。

示例:

[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:portuser@host:porthost: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-overridedisable_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 的文档以获取详细信息