news 2026/8/3 17:23:34

Linux命令-smbclient(Samba/CIFS 客户端)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux命令-smbclient(Samba/CIFS 客户端)

Linux命令-smbclient(Samba/CIFS 客户端)

    • 🔰 简介
    • 📖 语法
    • ⚙️ 选项
    • 💡 交互命令
      • 文件和目录操作
      • 本地和会话控制
    • 💡 示例
      • 示例 1:列出服务器共享并连接
      • 示例 2:非交互式操作——单条命令和脚本自动化
      • 示例 3:备份 Windows 共享到 tar 归档
      • 示例 4:自动化备份脚本
      • 示例 5:指定 SMB 协议版本调试连接问题
    • ⚠️ 注意
    • 📚 相关命令
    • 📝 总结

快速参考smbclient是 Samba 套件中的命令行 FTP 式客户端,用于访问 Windows 共享文件夹(SMB/CIFS 协议)。它提供交互式 Shell 和非交互式命令两种模式,是 Linux 与 Windows 互操作的核心工具之一。

smbclient不需要挂载文件系统即可访问共享,适合临时查看、脚本自动化、备份等场景。如果需要持久挂载共享为本地目录,请使用mount -t cifs


🔰 简介

SMB(Server Message Block)协议是 Windows 文件和打印共享的基础,CIFS(Common Internet File System)是其后续版本。smbclient由 Samba 项目开发,让 Linux/Unix 系统能够像 FTP 客户端一样访问 SMB/CIFS 共享资源。

安装方式(因发行版而异):

# Debian/Ubuntu$sudoapt-getinstallsmbclient# RHEL/CentOS 7$sudoyuminstallsamba-client# RHEL/CentOS 8+ / Fedora$sudodnfinstallsamba-client# Arch Linux$sudopacman-Ssmbclient# openSUSE$sudozypperinstallsamba-client# 验证安装$ smbclient--versionVersion4.19.5-Debian

📖 语法

smbclient //服务器/共享名[选项]smbclient-L服务器[选项]# 列出共享smbclient //服务器/共享名-c"命令"# 执行单条命令

⚙️ 选项

选项说明
-L 服务器列出远程服务器上的所有共享资源
-U 用户名[%密码]指定登录用户名和密码(密码可直接跟在%后)
-W 工作组/域指定工作组或域名
-N匿名登录(无密码),等同于-U ""%""
-p 端口指定 SMB 端口(默认 445,旧版 139)
-m 协议级别指定 SMB 协议版本(如SMB2SMB3
-c "命令"连接后立即执行指定命令,执行完后退出
-d 级别调试级别(0-10),越高信息越详细
-I IP地址使用 IP 地址连接(跳过 NetBIOS 名称解析)
-A 认证文件从文件读取用户名和密码(格式:username=xxxpassword=xxx
--max-protocol 版本限制最高协议版本
--min-protocol 版本限制最低协议版本
-t 终端代码指定终端字符编码(如-t utf8
-T 选项创建 tar 格式备份(c创建、x提取)

💡 交互命令

进入 smbclient 交互模式后,可以使用的命令:

文件和目录操作

命令说明
ls/dir列出远程共享中的文件和目录
cd 目录切换远程工作目录
pwd显示远程当前目录
get 文件 [本地名]下载远程文件
put 文件 [远程名]上传本地文件
mget 通配符批量下载文件
mput 通配符批量上传文件
mkdir 目录创建远程目录
rmdir 目录删除远程空目录
del 文件/rm 文件删除远程文件
rename 旧名 新名重命名远程文件
more 文件查看远程文件内容
recurse切换递归操作开关(配合 mget/mput 使用)
prompt切换批量操作时的确认提示
lowercase切换下载文件名自动转小写

本地和会话控制

命令说明
lcd 目录切换本地工作目录
!命令在本地 Shell 中执行命令
queue显示打印队列(如果共享是打印机)
print 文件打印文件到远程打印机
volume显示共享的卷标信息
stat 文件显示远程文件详细信息
altname 文件显示文件的 8.3 短文件名
exit/quit/q退出 smbclient

💡 示例

示例 1:列出服务器共享并连接

# Step 1: 扫描目标服务器上的所有共享$ smbclient-L192.168.1.50-NSharename Type Comment --------- ---- ------- ADMIN$ Disk 远程管理 C$ Disk 默认共享 IPC$ IPC 远程 IPC ShareDocs Disk 共享文档 UserData Disk 用户数据 Printer1 Printer HP LaserJet SMB1 disabled -- no workgroup available# Step 2: 交互式连接到共享$ smbclient //192.168.1.50/ShareDocs-Ujohn Passwordfor[WORKGROUP\john]: ******** Try"help"to get a list of possible commands. smb:\>ls.D0Sat Jun1410:00:002026..D0Sat Jun1410:00:002026project_docs D0Fri Jun1315:30:002026README.txt A2048Sat Jun1409:00:002026sales_report.xlsx A15360Fri Jun1311:20:00202610485760blocks of size1024.5242880blocks available smb:\>cdproject_docs smb:\project_docs\>get design_spec.pdf gettingfile\project_docs\design_spec.pdf of size524288as design_spec.pdf(512.0KiloBytes/sec)(average512.0KiloBytes/sec)smb:\project_docs\>exit# 预期输出:# 列出所有共享 → 密码认证 → 浏览目录 → 下载文件 → 退出

示例 2:非交互式操作——单条命令和脚本自动化

# 方式一:使用 -c 执行单条命令$ smbclient //192.168.1.50/ShareDocs-Ujohn%mypassword-c"ls"# 注:%后面跟密码虽然方便,但在命令行中暴露密码不安全# 方式二:使用认证文件(更安全)$cat>~/.smb_credentials<<'CRED' username=john password=MySecurePass123 domain=WORKGROUP CRED$chmod600~/.smb_credentials $ smbclient //192.168.1.50/ShareDocs-A~/.smb_credentials-c"ls"# 方式三:多命令串联(用分号分隔)$ smbclient //192.168.1.50/ShareDocs-A~/.smb_credentials\-c"cd backups; prompt off; mget *.tar.gz; exit"# 预期输出:# getting file \backups\db_backup_20260601.tar.gz of size 104857600 ...# getting file \backups\db_backup_20260608.tar.gz of size 106954752 ...# 方式四:Here Document 实现复杂操作$ smbclient //fileserver/IT-A~/.smb_credentials<<'SMBCMD' cd Software/Linux mkdir "New Deployment" cd "New Deployment" lcd /tmp/deploy prompt off mput * ls exit SMBCMD# 预期输出:# smb: \> cd Software\Linux# smb: \Software\Linux\> mkdir "New Deployment"# smb: \Software\Linux\> cd "New Deployment"# smb: \Software\Linux\New Deployment\> lcd /tmp/deploy# smb: \Software\Linux\New Deployment\> mput deploy.tar.gz install.sh config.ini# Putting file deploy.tar.gz as \Software\Linux\New Deployment\deploy.tar.gz (100%)# Putting file install.sh as \Software\Linux\New Deployment\install.sh (100%)# Putting file config.ini as \Software\Linux\New Deployment\config.ini (100%)# smb: \Software\Linux\New Deployment\> ls# deploy.tar.gz A 10240000 Sat Jun 14 10:00:00 2026# install.sh A 512 Sat Jun 14 10:00:00 2026# config.ini A 2048 Sat Jun 14 10:00:00 2026

示例 3:备份 Windows 共享到 tar 归档

# smbclient 内置 tar 模式,可直接将共享内容打包成 tar# 这是备份 Windows 共享最便捷的方式之一# 创建备份(tar 归档到本地文件)$ smbclient //192.168.1.50/ShareDocs-A~/.smb_credentials\-Tc/backup/share_backup_$(date+%Y%m%d).tar# 从 tar 归档恢复到共享$ smbclient //192.168.1.50/ShareDocs-A~/.smb_credentials\-Tx/backup/share_backup_20260601.tar# 备份特定子目录$ smbclient //192.168.1.50/UserData-A~/.smb_credentials\-Tc/backup/userdata.tar project_docs/\*.pdf reports/\*# 指定 tar 增量备份(仅备份新文件)$ smbclient //192.168.1.50/ShareDocs-A~/.smb_credentials\-TcN/backup/share_incremental.tar# 预期输出:# 打包过程会在标准输出显示正在处理的文件列表# tar: dumped 142 files, 524288000 bytes total

示例 4:自动化备份脚本

#!/bin/bash# Windows 共享自动备份脚本# 将 Windows 共享内容周期备份到 Linux 服务器set-eCRED_FILE="/root/.smb_credentials"BACKUP_DIR="/backup/windows_shares"LOG_FILE="/var/log/smb_backup.log"DATE=$(date+%Y%m%d_%H%M%S)# 共享列表(格式:服务器 共享名)declare-ASHARES=(["fs01"]="IT_Docs HR_Data Finance"["fs02"]="Projects Backup")log(){echo"[$(date'+%Y-%m-%d %H:%M:%S')]$*"|tee-a"$LOG_FILE"}mkdir-p"$BACKUP_DIR"forSERVERin"${!SHARES[@]}";doforSHAREin${SHARES[$SERVER]};doBACKUP_FILE="${BACKUP_DIR}/${SERVER}_${SHARE}_${DATE}.tar"log"开始备份: //${SERVER}/${SHARE}->${BACKUP_FILE}"smbclient"//${SERVER}/${SHARE}"\-A"$CRED_FILE"\-Tc"$BACKUP_FILE"2>>"$LOG_FILE"if[$?-eq0];thenSIZE=$(du-sh"$BACKUP_FILE"|cut-f1)log"备份成功:${BACKUP_FILE}(${SIZE})"elselog"备份失败: //${SERVER}/${SHARE}"fidonedone# 清理 30 天前的旧备份find"$BACKUP_DIR"-name"*.tar"-mtime+30-deletelog"清理完成,已删除 30 天前的备份"# 预期日志输出:# [2026-06-14 03:00:01] 开始备份: //fs01/IT_Docs -> /backup/windows_shares/fs01_IT_Docs_20260614_030001.tar# [2026-06-14 03:05:23] 备份成功: /backup/windows_shares/fs01_IT_Docs_20260614_030001.tar (245M)# [2026-06-14 03:05:23] 开始备份: //fs01/HR_Data -> /backup/windows_shares/fs01_HR_Data_20260614_030523.tar# [2026-06-14 03:06:45] 备份成功: /backup/windows_shares/fs01_HR_Data_20260614_030523.tar (12M)

示例 5:指定 SMB 协议版本调试连接问题

# Windows 10/11 和 Windows Server 默认禁用 SMB1(因 WannaCry 安全漏洞)# 如果连接失败,需要指定更高的协议版本# 尝试使用 SMB2 连接$ smbclient //windows-server/Share-Uuser-mSMB2# 或$ smbclient //windows-server/Share-Uuser --max-protocol SMB3# 调试连接问题(-d 3 输出详细调试信息)$ smbclient //192.168.1.50/ShareDocs-Ujohn-d3-c"ls"lp_load_ex: refreshing parameters Initialising global parameters Processing section"[global]"added interface eth0ip=192.168.1.10bcast=192.168.1.255netmask=255.255.255.0 Connecting to192.168.1.50 at port445Got a positive name query response from192.168.1.50(192.168.1.50)saved_session_key:len=16doing spnego session setup gotOID=1.3.6.1.4.1.311.2.2.30 gotprincipal=NONE gotprincipal=not_defined_in_RFC4178@please_ignore.D0Sat Jun1410:00:002026..D0Sat Jun1410:00:002026# 指定 NetBIOS 名称和 IP(解决名称解析问题)$ smbclient //192.168.1.50/ShareDocs-I192.168.1.50-WWORKGROUP-Ujohn

⚠️ 注意

smbclient vs mount -t cifs 的选择

特性smbclientmount -t cifs
访问方式FTP 式交互命令文件系统挂载,像本地目录
持久性临时访问可持久挂载(fstab)
资源占用按需连接,不占用挂载点持续占用内核资源
应用兼容仅 smbclient 支持的操作用所有应用都能直接访问
脚本友好-c非交互模式需处理挂载/卸载
适用场景临时传输、备份脚本长期文件共享、开发环境

常见问题排查

  1. “NT_STATUS_CONNECTION_REFUSED”— 目标服务器 445 端口未开放,或防火墙阻止
  2. “NT_STATUS_LOGON_FAILURE”— 用户名或密码错误,注意域名前缀
  3. “protocol negotiation failed: NT_STATUS_CONNECTION_RESET”— SMB 协议版本不匹配,尝试指定-m SMB2-m SMB3
  4. 中文文件名乱码— 添加-t utf8选项,或设置LANG=zh_CN.UTF-8

📚 相关命令

命令说明
smbpasswd管理 Samba 用户密码
smbstatus查看 Samba 服务器连接状态
mount -t cifs将 SMB/CIFS 共享挂载到本地目录
nmblookupNetBIOS 名称查询
smbtree以树形结构显示网络中的共享
smbcontrol向 Samba 守护进程发送控制消息
testparm检查 Samba 配置文件语法

📝 总结

smbclient是 Linux 管理员访问 Windows 共享的瑞士军刀,它的价值在于:

  • 零挂载代价:不需要 root 权限挂载目录,普通用户即可使用
  • FTP 式操作:交互命令直观,学习曲线低
  • 脚本化友好-c选项和 Here Document 支持完美的自动化
  • 内置备份:tar 模式可直接打包远程共享,无需额外工具
  • 协议灵活:支持 SMB1 到 SMB3 的完整协议栈

日常运维中,临时访问 Windows 共享用 smbclient,长期挂载用mount -t cifs。两者搭配使用,覆盖所有 Linux-Windows 互操作场景。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/3 17:22:53

网站被黑应急处理与安全加固实战指南

1. 网站被黑紧急处理指南 当网站突然无法访问或浏览器弹出安全警告时&#xff0c;作为运维人员的第一反应应该是立即启动应急响应流程。去年处理某电商平台入侵事件时&#xff0c;我们发现黑客通过旧版插件漏洞上传了webshell&#xff0c;导致整站被植入赌博跳转代码。以下是经…

作者头像 李华
网站建设 2026/8/3 17:21:05

【限时开放】AI运营诊断工具箱(含LTV预测模型+退货归因AI看板):仅剩最后87个企业白名单席位

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;AI电商运营诊断工具箱的核心价值与适用场景 AI电商运营诊断工具箱并非通用型AI模型的简单封装&#xff0c;而是面向电商全链路运营场景深度定制的智能决策辅助系统。它将用户行为分析、商品生命周期建模、流量…

作者头像 李华
网站建设 2026/8/3 17:20:07

怀化旅游攻略:自然奇观与侗族文化的完美融合

1. 怀化旅游资源全景概览 作为湖南西部的生态文化名城&#xff0c;怀化拥有得天独厚的自然景观与丰富多彩的民族文化。这座被群山环抱的城市&#xff0c;藏着许多不为人知的秘境——从世界级的丹霞地貌到原生态的侗寨风情&#xff0c;从红色旅游胜地到舌尖上的特色美食&#xf…

作者头像 李华
网站建设 2026/8/3 17:18:07

应急响应:常见WebShell管理工具

常见WebShell管理工具 攻击者在入侵网站时&#xff0c;通常要通过各种方式写入Webshell&#xff0c;从而获得服务器的控制权限&#xff0c;比如执行系统命令、读取配置文件、窃取用户数据&#xff0c;篡改网站页面等操作。 本文介绍十款常用的Webshell管理工具&#xff0c;以…

作者头像 李华
网站建设 2026/8/3 17:16:13

AI服务器安全攻防实战:从CVE-2025-3248漏洞利用到入侵取证全解析

1. 项目概述&#xff1a;一次源于实战的AI服务器攻防演练 最近在内部做了一次红蓝对抗演练&#xff0c;目标是一台部署了主流AI框架的GPU服务器。这类服务器现在越来越常见&#xff0c;跑着大模型训练、推理服务&#xff0c;数据金贵&#xff0c;权限也高&#xff0c;自然成了攻…

作者头像 李华