解决 Windows Server Core 2025 上 OpenSSH 连接问题
最近在 Windows Server Core 2025
上配置 OpenSSH
服务器时遇到了一些连接问题。虽然服务器端的 OpenSSH
服务已经启动,但始终无法从我的 macOS
机器连接上来。经过一番排查,最终成功解决了这个问题,现在将整个过程记录下来,希望能帮助到遇到类似情况的朋友。
问题描述
我在 Windows Server Core 2025
上安装并启动了 OpenSSH 服务器。为了验证是否可以远程连接,我尝试从我的 macOS 机器使用 ssh
命令连接,但连接一直超时或被拒绝。
我首先尝试使用 nc
命令检查服务器的 22 端口是否开放:
nc -vz <服务器IP地址> 22 |
确认服务状态为 “Running”。
- 检查防火墙规则: 我检查了
Windows
防火墙规则以及ssh
端口情况:
PS C:\Users\Administrator> Get-NetFirewallRule -Name *ssh* |
PS C:\Users\Administrator> Get-NetFirewallRule -Name *ssh* | Get-NetFirewallPortFilter |
- 测试本地 SSH 连接: 为了排除服务器自身的问题,我在 Windows Server Core 上尝试连接本地的 OpenSSH 服务器:
ssh 127.0.0.1 |
连接成功,这表明 OpenSSH
服务器本身工作正常。
- 测试连接到外部 IP: 我又尝试从
Windows Server Core
连接到其自身的外部 IP 地址:ssh <服务器外部IP地址>
连接也成功了。
- 详细检查防火墙规则: 我查看了更详细的防火墙规则信息:
Get-NetFirewallRule -Name *ssh*
在输出中,我注意到 Profile
字段的值是 Private
。
- 检查网络连接配置文件: 我使用以下命令检查了
Windows Server Core
当前连接的网络配置文件的类型:Get-NetConnectionProfile
输出显示:
Name : Network |
NetworkCategory
的值为 Public。
解决方案
通过上述排查,发现问题在于防火墙规则 OpenSSH-Server-In-TCP
只适用于“专用”网络配置文件(Private),而我的 Windows Server Core
当前连接的网络被识别为“公共”网络(Public)。
解决办法是将该防火墙规则的应用范围扩展到“公共”网络。我使用了以下 PowerShell
命令来修改现有的规则:
Set-NetFirewallRule -Name OpenSSH-Server-In-TCP -Profile Private,Public |
执行此命令后,我再次从我的 macOS
机器尝试 SSH 连接,连接成功了!