如何用PowerShell验证SMB服务器是否强制要求签名?
测试SMB服务器是否强制签名的PowerShell方案
临时调整本地SMB客户端签名配置
Windows SMB客户端默认会自动协商签名,要强制尝试无签名连接,需临时修改客户端的注册表设置:
- 查看当前客户端签名配置:
Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" | Select-Object EnableSecuritySignature, RequireSecuritySignature
- 禁用客户端签名相关设置(测试后务必恢复):
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" -Name EnableSecuritySignature -Value 0 Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" -Name RequireSecuritySignature -Value 0
- 重启服务使设置生效:
Restart-Service LanmanWorkstation -Force
发起无签名连接测试
使用New-SmbMapping尝试连接目标服务器的共享目录:
New-SmbMapping -RemotePath "\\THE.IP.ADD.RSS\your-share-name" -UserName "your-account" -Password "your-password" -ErrorAction Stop
- 若服务器强制要求签名,命令会抛出错误(如签名不匹配、网络名称无法找到类的提示);
- 若服务器允许无签名连接,连接将成功建立。
验证连接签名状态
连接成功后,检查是否确实未使用签名:
Get-SmbConnection | Where-Object RemoteAddress -eq "THE.IP.ADD.RSS" | Format-List *
查看输出中的SecuritySignatureEnabled字段,值为False即代表无签名连接生效。
恢复本地客户端安全配置
测试完成后,立即恢复原有的SMB客户端签名设置,避免安全隐患:
# 替换为你之前查询到的原始值(通常是1) Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" -Name EnableSecuritySignature -Value 1 Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\LanmanWorkstation\Parameters" -Name RequireSecuritySignature -Value 1 Restart-Service LanmanWorkstation -Force
替代方案:使用net use命令
如果更倾向于传统命令,可结合SMB1强制无签名(前提是SMB1在客户端和服务器均启用):
net use Z: "\\THE.IP.ADD.RSS\your-share-name" /user:domain\account password /nosmb2 /nosmb3
服务器强制签名时,该命令会直接返回签名验证失败的错误。
内容的提问来源于stack exchange,提问作者Patrick Szalapski
相关产品推荐
相关产品推荐

