You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Windows 11 OpenSSH服务器持续报错‘port 22: No route to host’及相关连接问题求助

Windows 11 OpenSSH服务器持续报错‘port 22: No route to host’及相关连接问题求助

我完全理解你折腾了几个月的痛苦——Windows上的OpenSSH确实容易踩各种隐蔽的坑,咱们一步步拆解你的问题,从最基础的环节开始排查:

1. 先确认Windows本地OpenSSH服务是否真的在正常监听端口

先排除服务本身的配置失效问题:

  • 打开管理员权限的PowerShell,检查服务运行状态:
    Get-Service sshd
    
    确保Status显示为RunningStartTypeAutomatic。如果不是,执行以下命令修复:
    Set-Service -Name sshd -StartupType 'Automatic'
    Start-Service sshd
    
  • 验证端口监听情况(以你修改后的1100端口为例):
    netstat -ano | findstr :1100
    
    你需要看到状态为LISTENING的条目,且对应的PID能在任务管理器中匹配到sshd.exe进程。如果没有结果,说明sshd_config的端口设置未生效:
    • 打开C:\ProgramData\ssh\sshd_config(注意是ProgramData目录,不是Program Files),确认Port 1100这一行没有被#注释,然后重启服务:
      Restart-Service sshd
      

2. 排查本地网络的拦截(不止Windows防火墙)

你关闭了Windows防火墙,但还有其他可能的拦截点:

  • 第三方安全软件:比如Windows Defender高级威胁防护(WDATP)、360安全卫士、McAfee等,这类软件自带的防火墙规则可能会独立拦截sshd的入站连接。需要手动添加规则,允许sshd.exe通过指定端口(1100)的TCP入站请求。
  • 网络类型设置:如果你的Windows机器连接的是「公共网络」,Windows会默认拦截几乎所有入站请求。可以改成「专用网络」试试:
    打开设置 > 网络和互联网 > 以太网/Wi-Fi > 属性,将「网络配置文件」切换为「专用」。

3. 公网访问的核心问题:路由器端口转发未配置

你提到同网络的Linux机器能正常scp,但公网端口检测显示关闭——这几乎可以确定是路由器未设置端口转发

  • 内网内的机器可以直接访问Windows的OpenSSH端口,但公网的远程主机需要路由器将公网端口的请求转发到Windows的内网IP:
    1. 先获取Windows的内网IPv4地址:执行ipconfig,找到当前网络适配器的IPv4 Address(比如192.168.1.105
    2. 登录路由器管理后台(通常是192.168.1.1192.168.0.1,具体看路由器底部的标签),找到「端口转发」/「虚拟服务器」选项
    3. 添加一条规则:
      • 外部端口:1100
      • 内部端口:1100
      • 协议:TCP(SSH基于TCP协议)
      • 内部IP地址:你的Windows机器内网IP
    4. 保存规则后,再用公网端口检测工具测试,或让外网的朋友用ssh osbor@你的公网IP -p 1100验证

4. 解决Host key verification failed错误

这个错误和「无路由」是两个独立问题,本质是远程Linux主机的known_hosts文件记录的Windows主机密钥冲突了:

  • 登录远程Linux主机,编辑~/.ssh/known_hosts,删除包含你Windows公网IP的那一行(可以用grep 你的公网IP ~/.ssh/known_hosts快速定位)
  • 重新执行ssh osbor@你的公网IP -p 1100,会提示你接受新的主机密钥,输入yes即可
  • 另外,你之前的scp命令存在路径错误:destinationuser@localhost:/Desktop中的localhost指的是远程Linux主机本身,不是你的Windows机器!正确的命令应该是:
    scp sourceuser@server:~/file osbor@你的公网IP:/c/Users/osbor/Desktop
    
    (注意:Windows路径在OpenSSH环境中需要写成/c/Users/xxx/Desktop这种正斜杠格式)

5. 排除ISP的CGNAT问题

如果配置了端口转发还是无效,要确认你的ISP是否使用了运营商级NAT(CGNAT)——这种情况下你的Windows机器没有独立的公网IP,多个用户共享一个公网IP,公网端口转发会直接失效。

  • 你可以对比Windows和同网络Linux机器的公网IP:在Windows上用浏览器搜索「我的公网IP」,在Linux上执行curl ifconfig.me,如果两个IP不一致,说明Windows在CGNAT后面。这种情况可以考虑用反向SSH隧道或内网穿透工具(比如frp)绕开。

最后建议:先从内网测试缩小范围

先抛开公网,用同网络的另一台机器(比如手机开热点连接的电脑)测试:

ssh osbor@Windows的内网IP -p 1100

如果内网能正常连接,说明问题出在公网层面(端口转发/CGNAT);如果内网都连不上,那还是Windows本地的配置或安全软件拦截问题。

如果还是卡壳,可以把你的sshd_config内容、netstat -ano | findstr :1100的输出贴出来,我再帮你精准排查!

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

火山引擎 最新活动