smb_check_list
Samba 服务器的共享目录列表美化工具
一键脚本
bash <(curl -sL gitee.com/meimolihan/linux-command_sh/raw/master/smb_check_list.sh)
| 传参方式 | 命令示例 | 说明 |
|---|---|---|
| 不传参 | 脚本.sh | 使用默认参数(IP: 10.10.10.254,用户: guest) |
| 指定 IP | 脚本.sh 192.168.1.100 | 仅指定目标 IP |
| 指定 IP 和用户 | 脚本.sh 192.168.1.100 administrator | 指定 IP 和用户名 |
| 指定 IP、用户、密码 | 脚本.sh 192.168.1.100 administrator 123456 | 完整参数 |
项目简介
Samba 共享查询工具 基于 smbclient 命令实现,用于快速查看远程 SMB/CIFS 服务器的共享资源列表,支持匿名访问和密码认证两种模式。
- 依赖工具:
smbclient(需要安装samba-client或smbclient包)
效果预览
补充说明
该脚本用于快速查询 SMB 服务器上的共享资源,以表格形式展示共享名称、类型和备注信息,适合需要浏览 NAS 或 Windows 共享目录的场景。
功能特点
- 支持自定义目标 IP、用户名和密码(最多三个参数)
- 默认使用 10.10.10.254 和 guest 用户匿名访问
- 彩色表格输出:名称、类型、备注分列显示
- 自动过滤无效行和错误信息,只展示有效共享
- 内置
break_end流程控制,操作完成后等待用户确认
使用说明
- 直接运行脚本,使用默认参数查询
- 或传参指定 IP、用户名、密码
- 等待查询结果,表格展示所有可用共享
注意事项
- 需要安装
smbclient命令(apt install smbclient或yum install samba-client) - 匿名访问时密码留空即可
- 某些 SMB 服务器可能需要指定 SMB 协议版本(当前默认 SMB3)
- 如果连接失败,请检查目标 IP 是否可达以及防火墙是否放行
脚本源码
#!/bin/bash
set -uo pipefail
# ====================== 【可自定义配置区】 在这里修改所有默认参数 ======================
# 自动获取当前服务器本机IP(排除本地回环地址)
get_local_ip() {
hostname -I | awk '{print $1}'
}
DEFAULT_SMB_IP=$(get_local_ip)
# 默认 SMB 用户名
DEFAULT_SMB_USER="guest"
# 默认 SMB 密码(空 = 匿名访问)
DEFAULT_SMB_PASS=""
# ====================================================================================
list_color_init() {
export gl_hui=$'\033[38;5;59m'
export gl_hong=$'\033[38;5;9m'
export gl_lv=$'\033[38;5;10m'
export gl_huang=$'\033[38;5;11m'
export gl_lan=$'\033[38;5;32m'
export gl_bai=$'\033[38;5;15m'
export gl_zi=$'\033[38;5;13m'
export gl_bufan=$'\033[38;5;14m'
export reset=$'\033[0m'
}
list_color_init
break_end() {
echo -e "${gl_lv}操作完成${gl_bai}"
echo -e "${gl_bai}按任意键继续 ${gl_hong}.${gl_huang}.${gl_lv}.${gl_bai}\c"
read -r -n 1 -s -r -p ""
echo ""
clear
}
column_if_available() {
if command -v column &> /dev/null; then
column -t -s $'\t'
else
cat
fi
}
list_beautify_smb() {
local smb_ip="${1:-$DEFAULT_SMB_IP}"
local smb_user="${2:-$DEFAULT_SMB_USER}"
local smb_pass="${3:-$DEFAULT_SMB_PASS}"
{
printf "%s%-20s\t%-10s\t%s%s\n" \
"$gl_hui" "共享名称" "类型" "备注" "$reset"
printf "%s%-20s\t%-10s\t%s%s\n" \
"$gl_hui" "--------------------" "----------" "-------------------------" "$reset"
smbclient -L "${smb_ip}" -U "${smb_user}%${smb_pass}" -m SMB3 2>/dev/null \
| awk -v blue="$gl_lan" -v yellow="$gl_huang" -v white="$gl_bai" -v reset="$reset" '
/^[[:space:]]+Sharename/ {next}
/^[[:space:]]+---------/ {next}
/^Reconnecting/ {next}
/protocol negotiation/ {next}
/Unable to connect/ {next}
NF >= 3 {
name=$1; type=$2; comment=""
for(i=3; i<=NF; i++) comment = comment $i " "
gsub(/^[ \t]+|[ \t]+$/, "", comment)
printf "%s%-20s%s\t%s%-10s%s\t%s%s%s\n",
blue, name, reset,
yellow, type, reset,
white, comment, reset
}'
} | column_if_available
}
list_beautify_all() {
local target_ip="${1:-$DEFAULT_SMB_IP}"
local target_user="${2:-$DEFAULT_SMB_USER}"
local target_pass="${3:-$DEFAULT_SMB_PASS}"
clear
echo -e "${gl_zi}>>> SMB 共享资源查询 ${gl_bai}"
echo -e "${gl_bufan}目标地址: ${target_ip} 用户: ${target_user}${gl_bai}"
echo -e "${gl_bufan}————————————————————————————————————————————————${gl_bai}"
list_beautify_smb "$target_ip" "$target_user" "$target_pass"
echo -e "${gl_bufan}————————————————————————————————————————————————${gl_bai}"
break_end
}
list_beautify_all "$@"