Cryptology Academy · 课时

SFTP 与 SCP:安全文件传输

将 SFTP 和 SCP 与不安全的 FTP 进行比较,并了解它们提供的密码学保护

第 3 / 4 课13 个步骤

SFTP 与 SCP:安全文件传输 是 CoddyKit 上的免费 Cryptology Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cryptology Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cryptology Academy 课程共包含 4 节课。

SFTP 是 SSH 子系统,而不是 FTP

尽管名称相似,SFTP(SSH 文件传输协议)与 FTP 毫无关系。它是一种设计为作为 SSH-2 子系统运行的二进制协议,也就是说,它通过现有的、经过认证和加密的 SSH 连接运行。SSH 客户端会使用命令 ssh user@host -s sftp 在服务器上调用 SFTP 子系统。所有 SFTP 操作都会继承底层 SSH 传输层提供的安全保障。

SFTP 功能

SFTP 通过加密信道提供丰富的文件操作:列出目录内容、上传文件、下载文件、删除和重命名文件、创建和删除目录、读取和设置文件权限及时间戳,以及恢复中断的传输。这些功能使 SFTP 成为完整的远程文件系统接口,而不仅仅是文件传输工具。

SCP:通过 SSH 进行简单文件复制

SCP(安全复制协议)是一种较旧且更简单的通过 SSH 传输文件的协议。命令 scp file.txt user@host:/path 可以安全地复制文件。对于一次性传输,SCP 比 SFTP 更易于使用,但它只支持一部分操作:从本地复制到远程、从远程复制到本地,或在远程位置之间复制。它没有交互模式,对恢复中断传输的支持也很有限。

SCP 协议漏洞

最初的 SCP 协议存在一个严重漏洞:恶意服务器可以向客户端发送任意文件,而不管客户端请求了什么。控制服务器的攻击者可以覆盖目标目录之外的文件。OpenSSH 在 OpenSSH 9.0(2022 年)中弃用了传统 SCP 协议,转而使用基于 SFTP 的 scp。现代 scp 命令在底层使用 SFTP,从而消除了这类攻击,同时保留了熟悉的命令语法。

FTP、FTPS 与 SFTP

三种安全文件传输选项经常被混淆。FTP(21 端口)未加密,不应使用。FTPS(基于 SSL 的 FTP)在 990 端口(隐式模式)或 21 端口(使用 AUTH TLS 的显式模式)上为 FTP 添加 TLS,因此需要 FTP 基础设施和证书管理。SFTP 是一种完全独立的、运行在 SSH(22 端口)之上的协议,复用现有的 SSH 认证和密钥管理。通常来说,SFTP 比 FTPS 更易于配置和维护。

通过 SSH 使用 rsync 进行高效同步

rsync 是一种文件同步工具,只传输文件中发生变化的部分,因此在增量备份方面比 SCP 高效得多。使用 -e ssh 标志运行 rsync 时,所有数据都会通过 SSH 隧道传输。命令 rsync -avz -e ssh user@host:/remote/ /local/ 会将远程目录同步到本地,并且只传输差异部分。通过 SSH 使用 rsync 是服务器备份和部署工作流的标准做法。

处理大型文件传输

SFTP 支持断点续传:如果大型上传过程中连接断开,传输可以从上次确认的字节处继续,而不必从零开始。OpenSSH 的 sftp 客户端支持使用 reput 命令恢复上传,使用 reget 命令恢复下载。对于超大型传输(数 GB 的文件),lftp 等工具通过自动重试和带宽限速提供更完善的传输管理。

用于受限访问的 SFTP Chroot 隔离环境

OpenSSH 服务器可以使用 chroot 隔离环境,将 SFTP 用户限制在特定目录树中。将 Match User 指令与 ChrootDirectory 和 ForceCommand internal-sftp 添加到 SSH 配置中,可以创建隔离的 SFTP 环境。用户可以在指定目录中上传和下载文件,但无法访问文件系统的其余部分或执行命令行命令。这种方式广泛用于网站托管文件管理和客户端上传门户。

配置 SFTP 服务器

要在 OpenSSH 服务器上启用 SFTP,需要将 Subsystem sftp /usr/lib/openssh/sftp-server 添加到 sshd_config。sftp-server 二进制文件处理所有 SFTP 协议操作。对于 chroot 配置,ChrootDirectory 必须归 root 所有,且不能由任何其他用户写入,这是配置错误的常见来源。使用 sshd -t 测试配置,可以在重新加载服务前检查语法。

用于自动化备份工作流的 SFTP

SFTP 非常适合集成到自动化备份流水线中。备份服务器使用公钥身份验证进行连接,无需密码,从而可以在没有人工干预的情况下通过 cron 计划传输。备份用户受到 chroot 限制,只能访问上传目录;即使备份服务器遭到入侵,也能限制损害范围。监控 SFTP 连接失败和传输错误的日志,可以在备份问题影响恢复能力之前发出早期警告。

SFTP 客户端工具

除了命令行 SFTP 客户端之外,FileZilla、Cyberduck 和 WinSCP 等图形化工具还通过拖放界面、书签管理和并排目录视图支持 SFTP。这些工具深受偏好 GUI 工作流的开发者和管理员欢迎。它们都使用相同底层的 SFTP 协议和 SSH 身份验证,包括对 SSH 密钥文件和系统 SSH 代理的支持。

SFTP 与 SCP

旧版 SCP 协议中的哪项主要安全漏洞,促使 OpenSSH 将其替换为基于 SFTP 的实现?

SFTP 与 SCP:关键要点

SFTP 是 SSH 的一个子系统,与 FTP 无关。它通过加密的 SSH 提供完整的远程文件系统操作。SCP 更简单,但旧版协议存在服务器端路径遍历漏洞;OpenSSH 9.0 通过在底层切换到 SFTP 修复了该漏洞。FTPS 在 FTP 之上添加 TLS,而 SFTP 完全基于 SSH。通过 SSH 运行的 rsync 可提供高效的增量同步。根目录隔离环境会将 SFTP 用户限制在指定目录中。

免费开始

用 AI 导师学习 Cryptology Academy — 免费

在浏览器中编写并运行真实代码,获得全天候 AI 导师的即时帮助,并在网页或应用中继续学习。

课程
67
课程
261

常见问题解答

「SFTP 与 SCP:安全文件传输」课时是免费的吗?

是的 — 「SFTP 与 SCP:安全文件传输」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cryptology Academy 课程的其余内容,请升级到 CoddyKit PRO。 Cryptology Academy 课程共包含 4 节课。

「SFTP 与 SCP:安全文件传输」这节课中我会学到什么?

将 SFTP 和 SCP 与不安全的 FTP 进行比较,并了解它们提供的密码学保护 你通过在浏览器中直接运行的动手代码来练习 Cryptology Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Cryptology Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Cryptology Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「SFTP 与 SCP:安全文件传输」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Cryptology Academy 课中编写并运行代码吗?

能。每节 Cryptology Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 什么样的协议才安全
  2. SSH:保护远程访问
  3. SFTP 与 SCP:安全文件传输
  4. DNSSEC:验证 DNS 响应
← 返回 Cryptology Academy