Windows 上的 OpenSSH 提供安全文件传输协议(SFTP)功能。 本文介绍如何解决使用 SFTP 和 OpenSSH 管理 Windows Server 和 Windows 客户端时可能会遇到的最常见问题。
最佳做法和其他资源
- 使用最新支持的 OpenSSH 版本。
- 避免将 OpenSSH 配置为对 chroot 目录使用网络共享。
- 每次更改 OpenSSH 服务器配置时,都会通过运行
sshd -t来验证更改。 - 开始故障排除时,请检查事件查看器中是否有相关事件。
有关如何在 Windows 和 Windows Server 上配置 OpenSSH 的详细信息,请参阅以下文章:
如何启用 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 目录没有编写器权限。