我正在使用从以下位置下载的 OpenSSHhttps://github.com/PowerShell/Win32-OpenSSH/releases。
我的目标是设置一个 ssh 服务器,允许在没有 ssh 访问的情况下传输 sftp 文件。根据 OpenSSH 提供的官方文档,Windows 自 7.7 版起就应该支持此功能。发布后应该在 sshd_config 中设置限制,我尝试使用此文件一段时间,但我无法限制自己只能访问子文件夹,这是我在配置文件中添加的内容:
Subsystem sftp sftp-server.exe
ForceCommand internal-sftp
ChrootDirectory c:\users\myusername
AllowTcpForwarding no
PermitTunnel no
GatewayPorts no
有人能告诉我为什么这不起作用吗?或者我无法像这样仅设置 SFTP 访问?
另一个选项是禁用 SSH 连接。如何在 Windows 中使用 OpenSSh 实现此目的?
答案1
来自 Mika-nPowerShell-OpenSSH GitHub:
这适用于 OpenSSH-Win64 8.1.x 版本,但您需要设置以下 sshd_config 选项(默认情况下位于
%PROGRAMDATA%\SSH\
Windows 平台的文件夹位置):ForceCommand internal-sftp Subsystem sftp sftp-server.exe -d "D:\MyDataRoot\" ChrootDirectory D:\MyDataRoot PermitTunnel no AllowAgentForwarding no AllowTcpForwarding no X11Forwarding no AllowUsers sftpuser
因此,请考虑添加子系统行来-d
设置文件夹,或添加-d
到您的ForceCommand
条目中。
请注意,您还应确保用户具有正确的文件系统权限,以将其包含在文件夹中。
答案2
以下是对我有用的方法:
# Forcing SFTP functionality, needed for ChrootDirectory parameter below
ForceCommand internal-sftp
Subsystem sftp sftp-server.exe -d c:\home\
# Specify the default folder the user sees after SFTP authentication. Without this, users will see C:\users\myuser\ as default folder, which is not usually preferable
Match User <domain>\myuser1
ChrootDirectory c:\home\test1\
Match User <domain>\myuser2
ChrootDirectory c:\home\test2\
# Disable tunneling, authentication agent, TCP and X11 forwarding.
# Below parameters are recommended as best practice to prevent certain security bypassing
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no
GatewayPorts no