Linux smbclient命令介绍
smbclient是一个用于访问SMB/CIFS资源的客户端程序,它是Samba软件套件的一部分。SMB/CIFS是一种用于在网络上共享文件和打印机的协议,最初由微软开发,但也被其他操作系统支持。smbclient提供了一个类似于ftp的接口,可以与LAN Manager服务器通信,执行一些文件传输和管理的操作,如从服务器下载文件,上传文件到服务器,获取服务器的目录信息等。
Linux smbclient命令适用的Linux版本
smbclient命令适用于大多数Linux发行版,但需要安装smbclient软件包。这个软件包也被描述为“Unix的命令行SMB/CIFS客户端”。不同的Linux发行版可能有不同的安装命令,以下是一些常见的例子:
- Debian, Ubuntu, Mint, Kali:
sudo apt install smbclient
- CentOS, RHEL, Fedora:
sudo dnf install smbclient
- Arch, Manjaro:
sudo pacman -S smbclient
如果你的Linux发行版没有提供smbclient软件包,你也可以从Samba官网²下载源码并编译安装。
Linux smbclient命令的基本语法
smbclient命令的基本语法如下:
smbclient servicename [password] [options]
其中:
servicename
是要访问的服务器和服务的名称,格式为\\server\service
,其中server
是提供服务的LAN Manager服务器的NetBIOS名称,service
是服务的名称。例如,要连接到服务器lanman
提供的printer
服务,你可以使用\\lanman\printer
作为servicename
。password
是访问指定服务所需的密码。如果提供了这个参数,那么-N选项(禁止密码提示)会被假定。如果没有提供密码,也没有指定-N选项,那么客户端会提示输入密码,即使所需的服务不需要密码。(如果不需要密码,按回车键提供一个空密码。)options
是一些可选的参数,用于控制smbclient的行为和输出。有很多可用的选项,下面会介绍一些常用的。
Linux smbclient命令的常用选项说明
smbclient命令有很多可用的选项,这里只介绍一些常用的,完整的列表可以参考smbclient的手册页。以下是一些常用选项的说明:
选项 | 说明 |
---|---|
-A | 指定一个包含用户名和密码的文件,用于认证。这个文件的格式应该是username = user 和password = password 。这个选项可以避免在命令行中暴露密码。 |
-c | 指定一个要执行的命令字符串,而不是进入交互式模式。这个选项可以用于一次性的文件传输或管理操作。 |
-d | 指定调试级别,范围是0到10,数字越大,输出的调试信息越多。默认的调试级别是0,表示不输出调试信息。 |
-E | 将错误信息输出到标准错误流,而不是标准输出流。这个选项可以用于区分正常的输出和错误的输出。 |
-I | 指定服务器的IP地址,而不是使用NetBIOS名称解析。这个选项在NetBIOS名称和TCP/IP主机名不匹配或者要访问另一个网络的服务器时很有用。 |
-L | 列出服务器提供的服务,而不是连接到指定的服务。这个选项可以用于查看服务器的共享情况。 |
-M | 发送消息,使用“WinPopup”协议,给另一台计算机。这个选项可以用于给Windows用户发送弹出消息。 |
-N | 禁止密码提示。如果没有提供密码,那么使用一个空密码。 |
-O | 指定套接字选项,用于控制TCP/IP连接的参数。这个选项的格式和smb.conf文件中的socket options参数相同。 |
-p | 指定服务器监听的端口号,默认是139。 |
-T | 指定tar选项,用于将服务器上的文件打包或解包。这个选项可以用于备份或恢复服务器上的文件。 |
-U | 指定用户名,用于认证。如果没有提供这个选项,那么使用当前的用户名。如果提供了这个选项,那么客户端会提示输入密码,除非使用-A选项指定了一个包含密码的文件。 |
-W | 指定工作组或域的名称,用于认证。如果没有提供这个选项,那么使用当前的工作组或域。 |
Linux smbclient命令的实例
以下是一些smbclient命令的实例,展示了如何使用smbclient进行一些常见的操作。
- 列出服务器
fileserver
提供的服务:
[linux@bashcommandnotfound.cn ~]$ smbclient -L fileserver
Enter WORKGROUP\linux's password:
Anonymous login successful
Sharename Type Comment
--------- ---- -------
IPC$ IPC IPC Service (Samba 4.11.6)
print$ Disk Printer Drivers
printer Printer HP LaserJet 1020
public Disk Public Files
users Disk Home Directories
Anonymous login successful
Server Comment
--------- -------
Workgroup Master
--------- -------
WORKGROUP FILESERVER
- 连接到服务器
fileserver
的public
服务,使用用户名guest
和密码guest
,并进入交互式模式:
[linux@bashcommandnotfound.cn ~]$ smbclient \\\\fileserver\\public -U guest
Enter WORKGROUP\guest's password:
Try "help" to get a list of possible commands.
smb: \>
- 在交互式模式下,列出当前目录的文件和子目录:
smb: \> ls
. D 0 Mon Nov 27 16:16:35 2023
.. D 0 Mon Nov 27 16:16:35 2023
documents D 0 Mon Nov 27 16:16:35 2023
music D 0 Mon Nov 27 16:16:35 2023
pictures D 0 Mon Nov 27 16:16:35 2023
videos D 0 Mon Nov 27 16:16:35 2023
10485247 blocks of size 1024. 10485247 blocks available
- 在交互式模式下,切换到
documents
子目录,并下载一个文件report.pdf
到本地:
smb: \> cd documents
smb: \documents\> get report.pdf
getting file \documents\report.pdf of size 123456 as report.pdf (123.4 KiloBytes/sec) (average 123.4 KiloBytes/sec)
- 在交互式模式下,上传一个本地文件
resume.docx
到服务器的当前目录:
smb: \documents\> put resume.docx
putting file resume.docx as \documents\resume.docx (123.4 kb/s) (average 123.4 kb/s)
- 在交互式模式下,删除服务器上的一个文件
old.txt
:
smb: \documents\> del old.txt
- 在交互式模式下,创建一个子目录
backup
:
smb: \documents\> mkdir backup
- 在交互式模式下,退出smbclient:
smb: \documents\> quit
- 不进入交互式模式,直接执行一个命令字符串,将本地的一个文件夹
myfiles
到服务器的backup
子目录:
[linux@bashcommandnotfound.cn ~]$ smbclient \\\\fileserver\\public -U guest -c "cd documents; cd backup; recurse; prompt; mput myfiles"
Enter WORKGROUP\guest's password:
putting file myfiles/file1.txt as \documents\backup\myfiles\file1.txt (123.4 kb/s) (average 123.4 kb/s)
putting file myfiles/file2.txt as \documents\backup\myfiles\file2.txt (123.4 kb/s) (average 123.4 kb/s)
putting file myfiles/file3.txt as \documents\backup\myfiles\file3.txt (123.4 kb/s) (average 123.4 kb/s)
- 不进入交互式模式,直接执行一个命令字符串,将服务器的
music
子目录打包成一个tar文件,并下载到本地:
[linux@bashcommandnotfound.cn ~]$ smbclient \\\\fileserver\\public -U guest -c "cd music; tar c music.tar *"
Enter WORKGROUP\guest's password:
getting file \music\music.tar of size 1234567 as music.tar (1234.5 KiloBytes/sec) (average 1234.5 KiloBytes/sec)
- 不进入交互式模式,直接执行一个命令字符串,将本地的一个tar文件
backup.tar
上传到服务器的backup
子目录,并解包:
[linux@bashcommandnotfound.cn ~]$ smbclient \\\\fileserver\\public -U guest -c "cd documents; cd backup; put backup.tar; tar x backup.tar"
Enter WORKGROUP\guest's password:
putting file backup.tar as \documents\backup\backup.tar (1234.5 kb/s) (average 1234.5 kb/s)
extracting files from backup.tar
extracting file1.txt
extracting file2.txt
extracting file3.txt
- 发送一个弹出消息给Windows用户
winuser
:
[linux@bashcommandnotfound.cn ~]$ smbclient -M winuser
Enter message, end with CTRL-D; abort with CTRL-C
Hello, this is a message from Linux user.
^D
sent 32 bytes
Linux smbclient命令的注意事项
以下是一些使用smbclient命令时需要注意的事项:
- 如果你的服务器或服务的名称中包含空格,你需要用引号将它们括起来,例如
"\\file server\public files"
。 - 如果你的密码中包含特殊字符,你需要用反斜杠将它们转义,例如
p\@ssw0rd
。 - 如果你的服务器或服务需要域认证,你需要在用户名前加上域名,例如
DOMAIN\\user
。 - 如果你遇到
bash: smbclient: command not found
的错误,说明你没有安装smbclient软件包,你需要根据你的Linux发行版使用相应的命令安装它。
评论区