SMB 是一种流行的协议,用于通过网络共享文件。即使它是为 Windows作系统创建的,它也受到 Linux 发行版的支持。smbclient 命令可用于轻松访问 Windows 共享。通过使用 smbclient,可以轻松列出、上传、删除或导航远程 Windows 共享。smbclient 命令还提供了一个交互式 shell。
安装 smbclient
对于大多数 Linux 发行版,smbclient 命令都与 smbclient 包名称一起提供。该软件包也被描述为“Unix 的命令行 SMB/CIFS 客户端”。
Debian、Ubuntu、Mint、Kali:
sudo apt install smbclient
CentOS、RHEL、Fedora:
sudo dnf install smbclient
列出 SMB 共享
smbclient 可用于不同的作,但最常见的用法是列出远程系统的指定 SMB/CIFS Windows 共享服务的共享。-L 选项与 smbclient 命令一起使用,以列出所有共享。
smbclient -L fileserver
或者,可以使用远程服务器 IP 地址来列出带有 -L 选项的共享。在以下示例中,我们列出了 IP 地址 192.168.1.10 提供的共享。
smbclient -L 192.168.1.10
列出提供用户名的 SMB 共享
Windows 共享可能需要通过提供用户名和密码来使用凭据进行访问。因此,为了列出 SMB 共享,我们应该提供用户名和密码。-U 选项用于指定用户名。在以下示例中,我们将用户名指定为 “ismail” 以列出远程文件服务器上的共享资源。
smbclient -L fileserver -U ismail
指定用户名后,将请求此用户的密码。
列出指定的共享路径内容
smbclient 可用于列出指定的路径或目录内容。列出在远程共享主机名或 IP 地址之后添加路径的共享是非常相同的。在以下示例中,我们列出了“\Backup\2021”的内容。
smbclient -L \\fileserver\Backup\2021
或者,可以使用文件共享主机的 IP 地址,如下所示。
smbclient -L \\192.168.1.10\Backup\2021
Smb 客户端交互式 Shell
smbclient 最强大的功能之一是它的交互式 shell。远程共享可以像 FTP 一样连接,并通过 smbclient 提供新的 shell。此 shell 可用于导航、列出、上传、下载等文件。smb shell 可以只提供远程共享来启动。
smbclient "\\fileserver\Backup"
如果需要,可以使用 -U 选项提供用户名,然后自动提示输入密码。
smbclient "\\fileserver\Backup" -U ismail
列出文件和文件夹
在 smbclient 交互式 shell 中,我们可以使用 ls 命令列出文件。
smb: \> ls
上传文件和文件夹
可以使用 mput 命令上传文件和文件夹。但是为了上传指定的文件夹及其内容,应该使用 recurse 命令启用递归模式。也可以使用 mput 命令开始上传。
smb: \> recurse
smb: \> mput pictures
smb: \> mput /home/ismail/downloads
下载文件和文件夹
也可以使用 mget 命令下载文件和文件夹。如果有多个文件和文件夹要下载,则应使用 recurse 命令启用递归模式。
smb: \> recurse
smb: \> mget pictures
列出文件和文件夹属性
与本地文件和文件夹一样,SMB 共享文件和文件夹具有不同的属性。这些属性可以是大小、权限、NTFS 属性等。通过指定文件名,可以使用 allinfo 命令列出 files 和 folders 属性。
smb: \> allinfo data.txt
错误 NT_STATUS_CONNECTION_REFUSED
smbclient 尝试连接通过 SMB 端口运行的远程 Windows 共享服务。如果由于各种原因无法访问这些端口,我们可能会收到类似“错误NT_STATUS_CONNECTION_REFUSED”的错误。“错误NT_STATUS_CONNECTION_REFUSED”错误与网络和防火墙有关。服务可能无法运行,或者防火墙阻止访问此服务,或者存在网络问题。