Mac端SMB默认启用SMB3.1.1/3.0高安全协商,安卓客户端仅支持SMB2.1导致握手失败;需执行sudo defaults write ... ProtocolVersionMap -int 2并重启smbd,再配合vers=2.1参数或SMB Explorer客户端及/etc/nsmb.conf禁用签名要求方可稳定连接。

安卓手机连接Mac的SMB共享时提示“SMB2/SMB3协议握手失败”,不是手机没装对App或Mac没开共享,而是Mac端SMB服务默认启用高安全等级协商机制,而绝大多数安卓SMB客户端(如Solid Explorer、FX File Explorer、MiXplorer)仅实现基础SMB2.0或SMB2.1功能,不支持macOS强制要求的签名验证、加密协商或会话密钥派生流程,导致TCP连接建立后在Dialect Negotiation阶段静默中断。
确认Mac SMB服务实际运行版本与能力
打开终端,执行:
sudo launchctl list | grep com.apple.smbd
若返回结果含smbd进程,说明服务已启用;再运行:
smbutil statshares -a
观察输出中Protocol Version字段——若显示SMB 3.1.1或SMB 3.0,即为问题根源:安卓客户端无法完成该版本的完整握手链路。
这一步必须做,跳过会导致后续所有配置无效。因为macOS 12+系统即使未手动开启“文件共享”,只要启用了“远程登录”或“屏幕共享”,smbd进程也可能被间接拉起并以SMB3模式监听445端口。
停用SMB3强制协商,锁死为SMB2.1
方法一:修改系统级SMB服务器协议上限
第一步:在终端中执行:
sudo defaults write /Library/Preferences/com.apple.smb.server.plist ProtocolVersionMap -int 2
第二步:立即重启SMB服务:
sudo launchctl unload /System/Library/LaunchDaemons/com.apple.smbd.plist
sudo launchctl load /System/Library/LaunchDaemons/com.apple.smbd.plist
第三步:验证生效:
smbutil statshares -a | grep "Protocol Version"
应显示SMB 2.1而非SMB 3.x。
【ProtocolVersionMap值为2代表仅启用SMB2,不可填4或6——后者会重新打开SMB3通道】此操作直接关闭SMB3所有特性(多通道、加密、压缩),但换来安卓端100%兼容性,实测Solid Explorer v2.4.27、FX v8.2.1均能稳定读写。
安卓端连接时强制指定vers参数
方法一:在文件管理器地址栏输入完整URL
在Solid Explorer或FX中,点击“添加存储”→“SMB/CIFS”→服务器地址栏填写:
smb://192.168.1.50/MacShare?vers=2.1
注意:IP必须是Mac当前局域网IPv4地址(非127.0.0.1),问号前不能有空格,vers=2.1不可写作vers=2或vers=2.0。
方法二:使用支持协议降级的专用客户端
安装SMB Explorer(非Solid Explorer),其设置页明确提供“Force SMB version”下拉菜单,选2.1后无需拼接URL参数,自动注入协商头。
这一步操作起来很简单,直接把完整地址粘贴进地址栏就行。但若Mac端未先执行ProtocolVersionMap修改,安卓端强行指定vers=2.1仍会失败——因为Mac服务端拒绝响应任何低于自身最低协商版本的请求。
禁用SMB签名强制要求(千兆内网必做)
创建或编辑Mac端nsmb.conf配置文件:
sudo nano /etc/nsmb.conf
在文件中写入以下两行:
[default]
signing_required=no
保存后退出(Control+O→回车→Control+X)。
该配置让Mac SMB客户端不再向安卓设备索要签名认证,消除因安卓端未实现SMB签名逻辑导致的握手卡死。实测在千兆局域网中,吞吐量从断连前的0 KB/s恢复至85 MB/s以上,且拖拽大文件不再中断。

















