在Windows操作系统上设置SFTP服务器可以通过多种方式实现,包括使用OpenSSH或第三方软件如freeSSHd。以下是在Windows上设置SFTP服务器的基本步骤:
操作流程图:
安装组件 → 配置服务 → 创建用户 → 设置目录权限 → 启用防火墙 → 测试连接 → 安全加固
一、服务器搭建,使用PowerShell与OenSSH
用管理员打开PowerShell
1. 安装 OpenSSH 组件
Add-WindowsCapability -Online -Name OpenSSH.Server* # 安装组件:ml-citation{ref="1,4" data="citationList"}
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH.Server*' # 检查是否已安装 OpenSSH 服务器。若 State 显示 NotPresent,则需安装 OpenSSH 服务器
Start-Service sshd # 启动服务
Set-Service -Name sshd -StartupType 'Automatic' # 设置开机自启
2.配置防火墙。允许 22 端口通信:
New-NetFirewallRule -Name "OpenSSH-Server" -DisplayName "OpenSSH Server" -Direction Inbound -Protocol TCP -LocalPort 22 -Action Allow:ml-citation{ref="1,8" data="citationList"}
或者打开Windows Defender防火墙:
在左侧导航栏中,选择“高级设置”。
在右侧面板中,选择“Inbound Rules”。
在操作菜单中,选择“New Rule”。
选择“端口”选项,并点击“下一步”。
选择“特定本地端口”,输入“22”,并点击“下一步”。
选择“允许连接”,并点击“下一步”。
选择“所有配置文件”,并点击“下一步”。
输入规则名称,并点击“完成”
3.创建专用用户
New-LocalUser -Name "sftpuser" -Password (ConvertTo-SecureString "YourPassword" -AsPlainText -Force)
Add-LocalGroupMember -Group "Users" -Member "sftpuser" # 默认加入 Users 组:ml-citation{ref="4" data="citationList"}
或者:
#创建SFTP用户组
New-LocalGroup sftpusers
创建SFTP用户,并将其添加到 sftpusers 组
New-LocalUser -Name <用户名> -FullName <全名> -Description <描述>
Set-LocalUser -Name <用户名> -Password (ConvertTo-SecureString -AsPlainText "<密码>" -Force)
4.配置 SFTP 根目录与权限。
Subsystem sftp internal-sftp
Match Group sftpusers
ChrootDirectory %h
ForceCommand internal-sftp
AllowTcpForwarding no
或者:
编辑配置文件 C:\ProgramData\ssh\sshd_config,添加以下内容:
Subsystem sftp internal-sftp
Match User sftpuser
ChrootDirectory D:\sftp_root # 限制用户只能访问该目录
ForceCommand internal-sftp # 禁止 shell 访问
AllowTcpForwarding no:ml-citation{ref="1,4" data="citationList"}
创建目录并设置权限:
目录 D:\sftp_root 属主设为 Administrators,权限为 755
子目录(如 D:\sftp_root\userdata)属主设为 sftpuser,权限为 755
5.重启 SSH 服务
Restart-Service sshd # 使配置生效:ml-citation{ref="1,4" data="citationList"}
6.SFTP命令行测试:
sftp -P 22 sftpuser@服务器IP # 输入密码后尝试上传/下载文件
7.安全强化建议
密钥认证替代密码
生成密钥对:ssh-keygen -t ed25519
将公钥内容追加至 C:\Users\sftpuser\.ssh\authorized_keys
限制用户权限
禁止 Shell 访问(通过 ForceCommand internal-sftp 实现)
定期审计日志
查看日志路径:C:\ProgramData\ssh\logs 或 FileZilla Server 日志界面
二、通过Windows的可选功能与OpenSSH或者freeSSHd
Windows 10和Windows Server 2019开始,Microsoft提供了OpenSSH的Windows版本,可以直接通过系统的“可选功能”来安装。
freeSSHd是一个第三方的SSH和SFTP服务器软件,适用于Windows平台。
1.OpenSSH安装步骤:
在Windows 10中,进入“设置” > “应用” > “可选功能” > “添加功能”。
查找“OpenSSH服务器”功能,选择它,然后点击“安装”。
安装完成后,OpenSSH的二进制文件将被安装到%WINDIR%\\System32\\OpenSSH目录。
配置文件(sshd_config)和主机密钥将被安装到%ProgramData%\\ssh目录(在服务器第一次启动后)。
2. OpenSSH配置和启动服务:
允许Windows防火墙接受SSH服务器的传入连接。
通过“服务”管理工具启动OpenSSH SSH服务器服务,并设置为自动启动。
设置SSH公钥认证:
在Windows账户的个人资料文件夹中创建.ssh文件夹,并设置适当的访问控制列表(ACL)权限。
将公钥文件放入.ssh文件夹中的authorized_keys文件。
1. freeSSHd安装步骤:
从官方网站下载freeSSHd软件。
运行安装程序并按照提示完成安装。
安装完成后,可能会提示是否启动后台服务,选择“是”。
2.reeSSHd配置SFTP服务:
启动freeSSHd软件,确保以管理员权限运行。
在软件界面中启动SFTP服务。
添加用户并设置密码验证。
配置SFTP的根目录和用户目录权限。
应用并保存所有配置。
3.reeSSHd测试连接:
使用SFTP客户端软件(如FileZilla)配置本地SFTP站点。
输入服务器IP、端口号、用户名和密码进行连接测试。
通过端口映射实现公网远程访问
如果需要通过公网远程访问SFTP服务器,可以使用端口映射工具(如cpolar)来实现内网穿透。
4.reeSSHd设置步骤:
在cpolar官网注册账号并下载安装cpolar内网穿透工具。
登录cpolar web UI管理界面并创建SFTP隧道。
获取公网地址和端口号。
使用SFTP客户端连接公网地址进行测试。