You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

Windows下OpenSSH服务器公网端口转发SSH连接提示Access Denied,但内网直连正常

Windows下OpenSSH服务器公网端口转发SSH连接提示Access Denied,但内网直连正常

我来帮你梳理下这个问题,你遇到的情况其实挺常见的——内网直连完全正常,公网通过端口转发能走到密码输入环节但验证失败,这说明端口转发和基础的防火墙规则是生效的,问题大概率出在OpenSSH的登录配置或者Windows的本地安全策略上,我给你几个排查和解决的方向:

1. 检查OpenSSH的用户/IP登录限制配置

Windows的OpenSSH服务有个全局配置文件,很可能里面设置了仅允许内网IP的用户登录:

  • 打开隐藏的C:\ProgramData\ssh\sshd_config文件(注意是系统盘下的ProgramData,不是你个人用户目录里的.ssh文件夹)
  • 找一找有没有AllowUsersAllowGroups这两行配置。如果看到类似AllowUsers 你的用户名@192.168.*的内容,那公网IP发起的登录请求自然会被拒绝,因为来源IP不在允许范围内
  • 你可以把这行改成AllowUsers 你的用户名(允许该用户从任何IP登录),或者直接把这行注释掉(在行首加#),这样就取消了IP限制
  • 修改完配置后,记得用管理员权限打开PowerShell,运行Restart-Service sshd重启OpenSSH服务,让新配置生效

2. 调整Windows本地安全策略的验证模型

Windows默认的安全策略可能会限制远程本地账户的验证方式,导致公网登录失败:

  • 按Win+R组合键输入secpol.msc,打开本地安全策略编辑器
  • 依次展开「本地策略」→「安全选项」,找到「网络访问:本地账户的共享和安全模型」这一项
  • 如果当前设置是「仅来宾 - 对本地用户进行身份验证,其身份为来宾」,公网来的登录请求会被强制转成来宾账户,而来宾账户没有SSH登录权限,就会提示Access Denied
  • 把它改成「经典 - 本地用户以自己的身份验证」,之后重启电脑或者重启OpenSSH服务再尝试登录

3. 查看OpenSSH日志找精准原因

如果上面两个方法都没解决,你可以直接看OpenSSH的服务日志,它会告诉你具体的拒绝原因:

  • 打开Windows的「事件查看器」,依次展开「应用程序和服务日志」→「OpenSSH」→「sshd」
  • 里面会记录每一次登录请求的细节,比如是用户权限不足、IP被拒绝,还是配置不允许等,根据日志提示调整会更有针对性

4. 确认防火墙规则的远程地址范围

虽然你内网能正常登录,但还是可以再确认下之前创建的防火墙规则是否真的允许所有远程IP访问:

  • 用管理员权限打开PowerShell,运行Get-NetFirewallRule -Name sshd | Select-Object RemoteAddress
  • 如果返回的结果是Any,那防火墙规则没问题;如果是特定的内网IP段,那你需要把公网IP加进去,或者直接改成Any(如果不需要限制来源IP的话)

按照这几个方向排查调整后,应该就能解决公网登录提示Access Denied的问题了。

备注:内容来源于stack exchange,提问作者itsmarziparzi

火山引擎 最新活动