8120

排查常见 SFTP 问题 - Windows Server

Windows 上的 OpenSSH 提供安全文件传输协议(SFTP)功能。 本文介绍如何解决使用 SFTP 和 OpenSSH 管理 Windows Server 和 Windows 客户端时可能会遇到的最常见问题。

最佳做法和其他资源

使用最新支持的 OpenSSH 版本。

避免将 OpenSSH 配置为对 chroot 目录使用网络共享。

每次更改 OpenSSH 服务器配置时,都会通过运行 sshd -t来验证更改。

开始故障排除时,请检查事件查看器中是否有相关事件。

有关如何在 Windows 和 Windows Server 上配置 OpenSSH 的详细信息,请参阅以下文章:

适用于 Windows 的 OpenSSH 入门

适用于 Windows Server 和 Windows 的 OpenSSH Server 配置

如何启用 SFTP 日志记录

若要为 OpenSSH 服务器服务启用 SFTP 日志记录,请修改sshd_config文件,然后重启 OpenSSH 服务器服务。 执行以下步骤:

使用管理员级帐户打开文本编辑器,然后打开 %ProgramData%\ssh\sshd_config。 “日志记录”部分的默认文本应类似于以下摘录:

# Logging

#SyslogFacility AUTH

#LogLevel INFO

若要启用 SFTP 日志记录,请编辑文本,使其类似于以下摘录:

# Logging

SyslogFacility LOCAL0

LogLevel DEBUG3

此外,请添加(或修改)以下文本:

Subsystem sftp sftp-server.exe -f LOCAL0 -l DEBUG3

保存并关闭sshd_config文件。

若要重启 OpenSSH 服务器服务,请打开 Windows 命令提示符窗口,然后运行以下命令:

NET STOP "OpenSSH SSH Server" && NET START "OpenSSH SSH Server"

服务重启后,它会在 %ProgramData%\ssh\logs 中生成 SFTP 日志数据。 有关 OpenSSH 日志记录的详细信息,请参阅 如何启用 OpenSSH 详细日志记录。

Windows 和 Windows Server 上的常见 SFTP 问题

SFTP 用户进入了错误的目录或到了 chroot 环境之外

正确配置后,chroot 目录会将用户限制为特定的目录树。 此限制可防止用户访问文件系统的其余部分。

检查以下设置:

在sshd_config文件中,确保 ChrootDirectory 指向本地目录,并且不使用 UNC 路径。

确保 SYSTEM/Administrators 对 chroot 目录具有所有者权限。

确保每个用户在 chroot 目录中具有可写目录,并且该目录具有正确的权限。 保护 /.ssh/authorized_keys 文件。

注释

若要验证并修复 NTFS 权限,请在管理命令提示符窗口中使用 icacls 命令。

在 sshd_config 文件中,使用 ForceCommand internal-sftp 和 -d 开关以及 Subsystem sftp sftp-server.exe 命令一起设置上传目录。 可以使用这些设置在 Match 块中指定用户。

特定用户无法使用 SFTP 或收到“拒绝访问”错误

此行为指示所有权或权限问题。 检查以下设置:

确保 SYSTEM/Administrators 对 chroot 目录具有所有者权限。

确保每个用户在 chroot 目录中具有可写目录,并且该目录具有正确的权限。 保护 /.ssh/authorized_keys 文件。

注释

若要验证并修复 NTFS 权限,请在管理命令提示符窗口中使用 icacls 命令。

用户无法登录或收到“身份验证失败”或“服务器拒绝我们的密钥”

此行为指示公钥或密码问题。 检查以下配置:

使用 C:\ProgramData\ssh\administrators_authorized_keys 存储密钥,并使用 icacles 检查文件和文件夹权限。

如果服务器拒绝密钥,请将以下行添加到sshd_config:

PubkeyAcceptedKeyTypes +ssh-rsa

HostKeyAlgorithms +ssh-rsa

注释

进行这些更改后,请重启 OpenSSH 服务器服务。

OpenSSH 服务器服务未启动,或 SFTP 连接挂起

若要解决这些问题,请尝试以下作:

若要验证sshd_config设置,请运行sshd -t命令。

查看事件查看器中是否有任何相关事件。

若要检查和修复 chroot 目录树上的访问控制列表(ACL),请运行以下命令 icacles 。

查看 sshd_config 设置。 确保条目没有任何尾随空格,并确保 Subsystem sftp sftp-server.exe 命令存在。

如果这些作都无法解决问题,请卸载并重新安装 OpenSSH 服务器。

SFTP 日志缺失或不完整

查看ssdh_config中的日志设置。 SFTP 日志数据存储在 %ProgramData%\ssh\logs 中。

若要检查和修复日志文件夹中的 ACL,请运行以下命令 icacles 。

用户无法上传或下载文件

在sshd_config文件中,确保 ChrootDirectory 指向本地目录,并且不使用 UNC 路径。

确保 SYSTEM/Administrators 对 chroot 目录具有所有者权限。

确保每个用户在 chroot 目录中具有可写目录,并且该目录具有正确的权限。 运行 icacles 命令以检查和修复 ACL。

确保用户对 chroot 目录没有编写器权限。