三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

Mac SSH 连接 Windows 主机教程

Mac SSH 连接 Windows 主机教程

Mac SSH 连接 Windows 主机教程

前提条件

  • Mac 和 Windows 在同一网络,或网络之间可互通
  • Windows 具有管理员权限

步骤一:确认网络连通性

在 Mac 终端 ping Windows 的 IP:

ping<Windows_IP>

如果不通,检查:

  1. 两台机器是否在同一子网(ifconfig/ipconfig查看)

  2. 如果在不同子网,traceroute 看数据包在哪一步断了:

    traceroute<Windows_IP>
  3. 检查 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 WindowsWindows 端防火墙拦截入站请求
SSH 卡在Connecting to ... port 22SSH 服务未启动 / 防火墙拦截 22 端口 / 网络类型为 Public 但规则仅对 Private 生效
SSH 连接被拒绝SSH 服务未安装或未运行
SSH 连接超时中间网络设备拦截 / 火绒拦截
← 返回列表