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 目录没有编写器权限。