环境:Win10 1809+/Win11/Windows Server2019+;FlashFXP 直接用 SFTP over SSH 连接
目标:账号只能传文件,禁止 SSH 命令行登录,每个用户锁死在自己目录,看不到服务器其他磁盘文件。
一、安装 OpenSSH Server(管理员 PowerShell)
# 安装 OpenSSH 服务端
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
# 启动服务 + 设置开机自启
Start-Service sshd
Set-Service -Name sshd -StartupType Automatic
# 查看状态,确认 Running
Get-Service sshd
二、新建专门的 SFTP 本地账号(推荐,不要用微软邮箱账号)
管理员 PowerShell 执行,示例账号:sftp01,自行替换密码
New-LocalUser -Name "sftp01" -Password (ConvertTo-SecureString "ABC@123456" -AsPlainText -Force) -FullName "SFTP用户01"
⚠️ 微软在线账号(邮箱登录)不支持密码登录 OpenSSH,一定要新建本地离线账号。
三、创建目录结构(重点!Windows OpenSSH Chroot 有特殊权限规则)
示例根路径 D:\sftp\sftp01
D:\sftp
└── sftp01 ← Chroot锁定目录(这个目录**不能给sftp01写入权限**!)
└── upload ← 真正上传下载目录,sftp01在此文件夹读写
原理:Chroot 目录所有者必须是 SYSTEM / Administrators;chroot 根目录不可写,可写目录必须是它的子文件夹,否则登录直接失败
一键设置 NTFS 权限(管理员 CMD 执行,直接复制)
:: 父壳目录 D:\sftp\sftp01:管理员/SYSTEM拥有,sftp01只有读取,不可写
icacls D:\sftp\sftp01 /inheritance:r
icacls D:\sftp\sftp01 /grant Administrators:(F) SYSTEM:(F)
:: 子目录 upload:给 sftp01 修改、读写权限
icacls D:\sftp\sftp01\upload /grant sftp01:(M)
四、修改 sshd_config 配置文件(核心模板)
路径:C:\ProgramData\ssh\sshd_config(ProgramData 是隐藏文件夹)
管理员打开:
notepad C:\ProgramData\ssh\sshd_config
全部配置模板(直接替换原有内容,端口 26、密码登录、仅 SFTP)
# 修改监听端口
Port 22
# 密码登录开启
PasswordAuthentication yes
# 公钥认证按需关闭(我们用密码)
PubkeyAuthentication no
# 子系统:使用内置internal-sftp(支持chroot,关键)
Subsystem sftp internal-sftp
# ===================== 用户隔离配置,放在文件最后 =====================
# sftp01 用户规则:仅SFTP、禁止终端、禁止端口转发、锁定目录
Match User sftp01
ForceCommand internal-sftp
ChrootDirectory D:\sftp\sftp01
PermitTTY no
AllowTcpForwarding no
X11Forwarding no
PermitTunnel no
AllowAgentForwarding no
多用户扩展:在末尾继续追加 Match User sftp02 {...} 块即可
校验配置语法(必做!写错 sshd 直接起不来)
& "$env:WINDIR\System32\OpenSSH\sshd.exe" -t
✅ 正常输出:Server listening on :: port 22.
❌ 报错:回去检查配置、路径、换行、空格
校验无误,重启 sshd 服务:
Restart-Service sshd
五、防火墙放行 TCP 22 端口(管理员 PowerShell)
New-NetFirewallRule -Name sshd_sftp_22 -DisplayName "OpenSSH SFTP 22" -Enabled True -Direction Inbound -Protocol TCP -Action Allow -LocalPort 22
六、FlashFXP 连接参数(和你原来 freeSSHd 几乎一样)
✅ 登录进去第一眼看到 upload 文件夹,所有文件上传下载都放到 upload 内
✅ 不再需要勾选老旧弱算法(diffie-hellman-group1-sha1),现代加密套件,稳定上传大文件不会崩溃
七、测试与常见坑排查
登录成功,但看不到文件夹:99% 是 Chroot 目录 NTFS 权限错误,重新跑上面 icacls 权限命令
sshd 服务启动失败:一定先用 sshd.exe -t 校验配置
认证失败:确认是本地账号,不是微软邮箱账号;账号密码区分大小写
能登录,但上传报错:确认是往 upload 子目录传,不要直接在 chroot 根目录新建文件
八、进阶:批量多用户模板示例
新增 sftp02 用户,目录 D:\sftp\sftp02,在 sshd_config 末尾追加:
Match User sftp02
ForceCommand internal-sftp
ChrootDirectory D:\sftp\sftp02
PermitTTY no
AllowTcpForwarding no
X11Forwarding no
PermitTunnel no
AllowAgentForwarding no
同步新建目录、执行 icacls 权限脚本即可。
安全备注
- 内网使用非常合适;如果放公网,建议改成密钥登录,关闭 PasswordAuthentication yes
该文章在 2026/11/3 17:28:38 编辑过