SMB巡检脚本需依次验证连通性(telnet/nc测445端口)、共享列表(smbclient或net view)、读取能力(挂载后ls),任一失败即终止并记录;最终输出结构化状态日志,支持定时运行。
用脚本自动化巡检smb共享,核心是验证“连得上、登得进、读得取、权限对”。不依赖图形界面,纯命令行+轻量判断即可实现日常健康检查。
确认SMB服务端口与基础连通性
先排除网络和防火墙问题。Windows默认SMB走TCP 445,Linux Samba可配但通常也用445。
- 用telnet或nc测试目标IP和端口是否响应(如
nc -zv 192.168.1.100 445) - 失败则说明网络不通、防火墙拦截或SMB服务未启动,无需继续后续步骤
- Linux下可加timeout 3防卡住,例如:
timeout 3 nc -z 192.168.1.100 445
尝试匿名或指定凭据访问共享列表
验证SMB协议层面是否就绪,能否列出共享名。
- Linux用smbclient:
smbclient -L //192.168.1.100 -U ""%"" 2>/dev/null | grep -E '^[a-zA-Z0-9]' | head -10(尝试空用户) - 若需账号密码,改用
-U "domainuser%password"(生产环境建议用credentials文件避免明文) - Windows可用net view:
net view \192.168.1.100 /u:domainuser password 2>nul && echo OK || echo FAIL
挂载并校验实际读写能力
仅列共享不够,必须模拟真实使用路径——挂载后尝试创建/读取小文件。
通过 SSH 隧道从 Android 设备在互联网上对 Windows PC 实现完整远程控制的设置与使用指南,适用于远程桌面访问、安全 RDP 等。
- Linux示例(临时挂载):
mkdir -p /mnt/smb-test && mount -t cifs //192.168.1.100/share /mnt/smb-test -o username=user,password=pass,vers=3.0,nounix,ro 2>/dev/null
然后ls /mnt/smb-test/. 2>/dev/null && echo "Read OK" || echo "Read FAIL" - Windows可用PowerShell New-PSDrive临时映射,执行
Get-ChildItem后Remove-PSDrive清理 - 注意:只读测试足够日常巡检;写测试需确保目录有权限且不影响业务数据
整合为可定时运行的巡检脚本
把上述逻辑串成完整脚本,输出结构化结果,方便日志归集或告警。
- Linux Bash脚本开头定义目标IP、共享名、凭据路径等变量
- 每步设超时(如timeout 10)、捕获退出码,任一环节失败立即记录并退出
- 最终输出类似:
[2024-06-15 09:30] SMB://192.168.1.100/share — UP, LIST_OK, READ_OK - 加入crontab每天早8点运行:
0 8 * * * /opt/bin/smb-health-check.sh >> /var/log/smb-check.log 2>&1
不复杂但容易忽略细节:SMB协议版本兼容性(尤其是Win10/11默认禁用v1)、凭据有效期、挂载点残留、SELinux或AppArmor限制。脚本里加上vers=3.0和nounix能避开多数兼容问题。

















