Windows OpenSSH加固核心是端口修改、禁用密码登录、限制访问主体与来源、启用日志监控。具体操作包括:改端口并同步防火墙规则;设PasswordAuthentication no、PubkeyAuthentication yes;用AllowUsers限定用户/IP;PermitRootLogin no;开启SyslogFacility AUTH和LogLevel VERBOSE,结合脚本或Fail2ban封禁暴力尝试IP。
windows 环境下启用 openssh 服务后,若未做针对性加固,极易成为暴力破解、未授权访问和中间人攻击的目标。关键不在于“是否开启 ssh”,而在于“如何让每次连接都可信、可控、可审计”。以下是面向生产环境的实用加固路径,聚焦 windows 原生 openssh(10/11 内置或第三方移植版),跳过理论,直给操作要点。
改端口 + 防火墙同步放行
默认 22 端口是扫描器第一目标。改端口不是万能,但能过滤掉 90% 的自动化爆破流量。
- 编辑 C:\ProgramData\ssh\sshd_config,取消注释并修改 Port 行(例如:Port 22222)
- 保存后以管理员身份运行 PowerShell,执行:Restart-Service sshd
- 立即配置 Windows 防火墙:打开“高级安全 Windows Defender 防火墙” → 入站规则 → 新建规则 → 端口 → TCP → 特定本地端口(填你刚设的端口号,如 22222)→ 允许连接 → 命名(如 “SSH Custom Port”)
- 务必禁用旧的 22 端口规则(如有),避免双端口暴露
禁用密码登录,强制密钥认证
只要允许密码登录,暴力破解就始终存在。密钥登录本质是“非对称加密验证”,无法被字典穷举。
在 Windows 上执行终端命令,或对比 Windows 与 Linux 的 Shell 语法时使用。建议先检测当前 Shell 是 PowerShell 还是 cmd.exe,再给出相应命令……
- 在 sshd_config 中设置:PasswordAuthentication no、PubkeyAuthentication yes
- 确保用户目录下 C:\Users\{用户名}\.ssh\authorized_keys 文件存在且权限正确(仅该用户有读写权,系统/管理员无写权)
- 公钥格式必须为单行,以 ssh-rsa AAAA... 或 ssh-ed25519 AAAA... 开头,末尾无空格或换行
- 测试前先用密码方式连一次,确认密钥已写入再禁用密码,避免锁死自己
限制登录主体与来源
最小权限原则:只让必要的人、从必要的位置登录。
- 在 sshd_config 中使用 AllowUsers 明确指定可登录账户(例如:AllowUsers admin@192.168.1.* user2@10.0.0.5)
- 若需按 IP 段控制,配合 Windows 防火墙的“作用域”设置:新建入站规则时,在“作用域”页签中填入允许的远程 IP 地址范围
- 禁用 root(即 Administrator)直接登录:PermitRootLogin no;日常运维用普通账户 + sudo(需提前在 C:\ProgramData\ssh\administrators_authorized_keys 中配置管理员密钥)
启用连接监控与失败锁定
Windows 自带 OpenSSH 不含 DenyHosts 类工具,但可通过日志+任务计划实现基础防护。
- 确保 sshd_config 中开启日志:SyslogFacility AUTH、LogLevel VERBOSE
- 日志默认写入 Windows 事件查看器 → “应用程序和服务日志” → “OpenSSH” → “Operational”
- 创建 PowerShell 脚本定期扫描事件日志(Event ID 4 或 8 表示认证失败),连续 5 次失败则调用 netsh advfirewall firewall add rule 封禁对应 IP(脚本需管理员权限运行)
- 也可借助第三方轻量工具如 Fail2ban for Windows(需 Python 环境),自动解析 OpenSSH 日志并联动防火墙

















