SFTP
SFTP 端口指南:通过 SSH 进行安全文件传输
了解 SFTP 如何使用 SSH、何时公开端口 22、如何测试远程访问以及如何保护帐户、目录和审核日志。
- 默认端口
- 22
- 协议
- TCP
- 主要用途
- 安全文件传输
- 传输方式
- SSH
SFTP 端口是什么?
SFTP 是 SSH 文件传输协议。它通常在与 SSH 相同的 TCP 端口(端口 22)上运行,并使用 SSH 传输来验证用户身份、加密文件传输和保护目录操作。与经典 FTP 不同,SFTP 不需要单独的命令通道和数据通道。
SFTP 通常在端口 22 上使用 SSH
如果 SSH 服务器正在侦听 22 并且为该帐户启用了 SFTP,则 SFTP 客户端通常可以在不打开其他端口的情况下进行连接。
安全传输仍需访问控制
加密可以保护传输中的文件,但您仍然需要强大的身份验证、受限目录、最小权限和日志记录。
SFTP 的工作原理
SFTP 不是在顶部添加加密的 FTP。它是一个在 SSH 会话内运行的独立协议。客户端连接到 SSH 服务器,使用密码、密钥、证书或其他 SSH 支持的方法进行身份验证,然后启动 SFTP 子系统来列出目录、上传文件、下载文件、重命名路径和管理权限。
由于 SFTP 依赖于 SSH,因此它受益于 SSH 加密、主机密钥验证和成熟的身份验证控制。因此,对于大多数部署,SFTP 端口为 TCP 22。一些组织将 SSH 和 SFTP 移至另一个端口以减少背景扫描噪音,但更改端口并不会取代身份验证和授权控制。
SFTP 与 FTP、FTPS 和 SCP
经典 FTP 通常使用端口 21 进行命令,并使用单独的数据端口进行传输。这使得防火墙和 NAT 更加复杂,并且普通 FTP 发送凭证和数据时不加密。 FTPS 在 FTP 的基础上添加了 TLS,但仍然保留了带有命令和数据通道的 FTP 模型。
SFTP 使用一个 SSH 连接,通常更容易允许通过防火墙并且更容易审核。 SCP 也使用 SSH,但 SFTP 提供更丰富的文件管理操作,并且是交互式传输、合作伙伴删除和自动化文件工作流程的更好默认设置。
何时应打开 SFTP 访问
当合作伙伴、自动化作业、备份流程、部署管道或内部团队需要与服务器安全地交换文件时,打开 SFTP 访问。常见示例包括供应商数据馈送、夜间导出、日志收集、安全文档交付以及客户或现场设备的受控上传区域。
不要仅仅因为 SFTP 已加密就广泛公开它。面向互联网的 SSH 服务会吸引凭据攻击和自动扫描。如果只有一小部分人需要访问,请限制源 IP、在 VPN 或专用网络后面发布 SFTP,或者使用具有更强策略控制的托管传输网关。
打开 SFTP 端口之前
在为 SFTP 打开端口 22 之前,请确认 SSH 服务器已安装、正在运行并配置为允许 SFTP 子系统。然后决定应连接哪些用户或服务帐户、他们可以看到哪些目录、是否允许密码身份验证以及如何记录上传和下载。
将网络可达性与帐户授权分开。端口检查器可以显示 TCP 22 是否可以从 Internet 访问,但它不能证明特定用户可以登录或 chroot 目录是否正确。使用 SFTP 客户端或 ssh 命令行测试来验证应用程序级行为。
如何在 Windows、Linux 和 macOS 上启用 SFTP
在 Windows Server 上,安装并启用 OpenSSH Server,在 Windows Defender 防火墙中允许入站 TCP 22,并确认 sshd 服务正在运行。如果服务器位于云环境,还需要在云防火墙或安全组中允许22端口。使用专用帐户而不是广泛的管理员访问权限。
在 Linux 上,安装 OpenSSH Server,确认 sshd 正在侦听端口 22,并确保在 sshd_config 中启用了 SFTP 子系统。对于受限文件传输帐户,请配置 chroot 目录、所有权规则和 ForceCommand 内部 sftp,以便用户无法获得交互式 shell。
在 macOS 上,可通过内置 SSH 服务使用 SFTP。它最常用于本地网络、开发机器或实验室环境。如果将其暴露在受信任的网络之外,请应用与在服务器上使用的相同的基于密钥的身份验证和防火墙规则。
- 服务层:OpenSSH 服务器或其他 SSH 实现必须正在运行并且必须启用 SFTP 子系统。
- 网络层:主机防火墙、云安全组、路由器转发和 VPN 策略必须允许所选的 TCP 端口。
- 帐户层:用户应拥有最低权限、专用目录,除非需要,否则没有 shell 访问权限。
- 审计层:记录成功的传输、失败的登录、密钥更改、权限错误和异常的源网络。
如何测试 SFTP 连接
首先根据公共主机名或 IP 地址和端口 22 进行外部端口检查。如果该端口打开,则可以访问 SSH 服务的 TCP 路径。接下来,使用 SFTP 客户端或运行 sftp user@example.com 来验证身份验证、主机密钥信任、目录访问和上传权限。
如果您需要较低级别的详细信息,请使用 ssh -vvv user@example.com 测试 SSH 握手,或使用 ss -tlnp、netstat 或 PowerShell 检查服务器上的侦听器。对于云服务器,请将主机防火墙规则与云安全组进行比较,因为两层都必须允许连接。
SFTP常见故障处理案例
如果 SFTP 端口显示已关闭,则 sshd 可能未运行,可能正在侦听不同的端口,或者可能被主机防火墙阻止。如果检查超时,云安全组、路由器 NAT 规则、ISP 过滤器、VPN 策略或源 IP 允许列表可能会在数据包到达服务器之前将其丢弃。
如果端口打开但 SFTP 登录失败,请检查用户名、密钥权限、密码策略、MFA 要求、允许的用户、chroot 所有权、ForceCommand 规则和服务器日志。一个常见的错误是为用户授予 chroot 目录写入权限; OpenSSH 需要特定的所有权和权限模式才能使 chroot 安全工作。
SFTP 安全检查表
优先选择 SSH 密钥或基于证书的身份验证而不是密码。禁用 root 登录、限制用户可以连接、轮换密钥、删除未使用的帐户以及使用密码或硬件支持的存储来保护私钥。对于合作伙伴访问权限,请为每个合作伙伴创建一个帐户,以便可以明确地归因和撤销活动。
使用 chroot 或严格范围的目录限制文件系统访问,除非需要,否则避免共享可写文件夹,并监视失败的登录和异常的传输量。如果 SFTP 面向互联网,请结合速率限制、源允许列表、入侵检测和 SSH 服务器的定期修补。
常见问题
SFTP 使用什么端口?
SFTP 通常使用 TCP 端口 22,因为它通过 SSH 运行。如果 SSH 服务器配置为侦听该端口并且客户端指定该端口,则它可以在不同的端口上运行。
SFTP 与 FTPS 相同吗?
否。SFTP 是一种在 SSH 内部运行的文件传输协议。 FTPS 是受 TLS 保护的 FTP。它们是不同的协议并且不能互换,除非客户端和服务器都支持相同的协议。
我可以在不向互联网开放端口 22 的情况下使用 SFTP 吗?
是的。您只能通过 VPN、专用网络、堡垒主机、零信任访问层或源 IP 允许列表公开 SFTP。这通常比将 SSH 发布到整个互联网更安全。
为什么端口 22 打开但 SFTP 仍然失败?
当身份验证或 SFTP 子系统失败时,TCP 端口可能可达。检查帐户权限、密钥格式、chroot 所有权、ForceCommand 设置、允许的用户、MFA 策略和 SSH 服务器日志。