Mac SSH 连接 Windows 主机教程
前提条件
- Mac 和 Windows 在同一网络,或网络之间可互通
- Windows 具有管理员权限
步骤一:确认网络连通性
在 Mac 终端 ping Windows 的 IP:
ping<Windows_IP>如果不通,检查:
两台机器是否在同一子网(
ifconfig/ipconfig查看)如果在不同子网,traceroute 看数据包在哪一步断了:
traceroute<Windows_IP>检查 Windows 防火墙是否拦截了 ICMP(ping)
放行 ICMP(Windows PowerShell 管理员)
# Windows 防火墙放行 pingEnable-NetFirewallRule-DisplayName"文件和打印机共享(回显请求 - ICMPv4-In)"如果装了火绒等第三方防火墙,也需要在其中放行 ICMP 或临时退出测试。
步骤二:安装并启动 OpenSSH Server
检查是否已安装
Get-Servicesshd如果返回Status: Running,跳到步骤三。
安装 OpenSSH Server
Add-WindowsCapability-Online-Name OpenSSH.Server~~~~0.0.1.0启动服务并设置开机自启
Start-ServicesshdSet-Service-Name sshd-StartupType Automatic验证端口监听
netstat-an|findstr :22应看到0.0.0.0:22 LISTENING。
步骤三:配置防火墙放行 22 端口
检查现有规则
Get-NetFirewallRule|Where-Object{$_.DisplayName-like"*ssh*"}如果没有结果,添加规则:
New-NetFirewallRule-Name sshd-DisplayName'OpenSSH Server'-Enabled True-Direction Inbound-Protocol TCP-Action Allow-LocalPort 22关键:检查网络类型
Get-NetConnectionProfile查看NetworkCategory字段。如果显示Public(公用网络),默认的 SSH 规则只对Private生效,需要修改:
Set-NetFirewallRule-Name"OpenSSH-Server-In-TCP"-Profile Any这一步是常见坑点——规则明明存在且启用,但因为网络类型不匹配导致不生效。
第三方防火墙
如果安装了火绒等安全软件,需要在其网络防护/IP 协议控制中放行 TCP 22 端口,或临时退出测试。
步骤四:从 Mac 连接
ssh<用户名>@<Windows_IP>例如:
sshjiajunye@xx.xx.xx.xx首次连接会提示确认指纹,输入yes,然后输入 Windows 用户密码。
调试模式
如果连接卡住,加-v查看卡在哪一步:
ssh-v<用户名>@<Windows_IP>常见卡住位置及对应原因:
| 卡在的位置 | 原因 |
|---|---|
Connecting to ... port 22 | 防火墙拦截或 SSH 服务未启动 |
Connection established后无响应 | SSH 服务异常 |
Permission denied | 用户名或密码错误 |
排查速查表
| 现象 | 排查方向 |
|---|---|
| Mac ping 不通 Windows | 防火墙拦截 ICMP / 不在同一子网 |
| Windows 能 ping Mac,Mac 不能 ping Windows | Windows 端防火墙拦截入站请求 |
SSH 卡在Connecting to ... port 22 | SSH 服务未启动 / 防火墙拦截 22 端口 / 网络类型为 Public 但规则仅对 Private 生效 |
| SSH 连接被拒绝 | SSH 服务未安装或未运行 |
| SSH 连接超时 | 中间网络设备拦截 / 火绒拦截 |