Linux smbclient Befehl mit praktischen Beispielen

LinuxLinuxBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab werden wir den Linux-Befehl smbclient und seine praktischen Anwendungen untersuchen. Das Dienstprogramm smbclient ist ein leistungsstarkes Werkzeug, das es Linux-Systemen ermöglicht, mit Windows-Dateifreigaben (SMB/CIFS-Freigaben) zu interagieren. SMB (Server Message Block) ist ein Netzwerkprotokoll, das Windows für die Dateifreigabe verwendet, und smbclient ermöglicht es Linux-Benutzern, auf diese Freigaben zuzugreifen.

Wir beginnen mit der Installation von smbclient auf unserem Ubuntu 22.04-System, lernen die grundlegende Syntax des Befehls und demonstrieren dann, wie man sich mit Windows-Freigaben verbindet, Verzeichnisse navigiert und Dateien überträgt.

Am Ende dieses Labs werden Sie in der Lage sein:

  • Das Dienstprogramm smbclient zu installieren und zu konfigurieren
  • Sich von Linux aus mit Windows-Freigaben zu verbinden
  • Dateien auf Windows-Freigaben zu navigieren und aufzulisten
  • Dateien zwischen Linux- und Windows-Systemen zu übertragen

Linux Commands Cheat Sheet

Dies ist ein Guided Lab, das schrittweise Anweisungen bietet, um Ihnen beim Lernen und Üben zu helfen. Befolgen Sie die Anweisungen sorgfältig, um jeden Schritt abzuschließen und praktische Erfahrungen zu sammeln. Historische Daten zeigen, dass dies ein Labor der Stufe Experte mit einer Abschlussquote von 27% ist. Es hat eine positive Bewertungsrate von 100% von den Lernenden erhalten.

Installation von smbclient auf Ubuntu 22.04

Das Paket smbclient ist ein Befehlszeilen-Tool, das es Linux-Systemen ermöglicht, mit SMB/CIFS-Dateifreigaben zu interagieren, die üblicherweise in Windows-Umgebungen verwendet werden. In diesem Schritt installieren wir dieses Paket auf unserem Ubuntu-System.

Zuerst aktualisieren wir den Paketindex, um sicherzustellen, dass wir die neueste Version erhalten:

sudo apt update

Die Ausgabe sollte in etwa so aussehen:

Hit:1 http://archive.ubuntu.com/ubuntu jammy InRelease
Get:2 http://security.ubuntu.com/ubuntu jammy-security InRelease [110 kB]
Get:3 http://archive.ubuntu.com/ubuntu jammy-updates InRelease [114 kB]
Get:4 http://archive.ubuntu.com/ubuntu jammy-backports InRelease [99.8 kB]
Fetched 324 kB in 1s (324 kB/s)
Reading package lists... Done

Nun installieren wir das Paket smbclient:

sudo apt install -y smbclient

Die Ausgabe sieht in etwa so aus:

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  libsmbclient
Suggested packages:
  samba-common
The following NEW packages will be installed:
  libsmbclient smbclient
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 479 kB of archives.
After this operation, 1,711 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu jammy/main amd64 libsmbclient amd64 2:4.15.5+dfsg-1ubuntu2 [222 kB]
Get:2 http://archive.ubuntu.com/ubuntu jammy/main amd64 smbclient amd64 2:4.15.5+dfsg-1ubuntu2 [257 kB]
Fetched 479 kB in 0s (1,030 kB/s)
Selecting previously unselected package libsmbclient.
(Reading database ... 26536 files and directories currently installed.)
Preparing to unpack .../libsmbclient_2%3a4.15.5+dfsg-1ubuntu2_amd64.deb ...
Unpacking libsmbclient (2:4.15.5+dfsg-1ubuntu2) ...
Selecting previously unselected package smbclient.
Preparing to unpack .../smbclient_2%3a4.15.5+dfsg-1ubuntu2_amd64.deb ...
Unpacking smbclient (2:4.15.5+dfsg-1ubuntu2) ...
Setting up libsmbclient (2:4.15.5+dfsg-1ubuntu2) ...
Setting up smbclient (2:4.15.5+dfsg-1ubuntu2) ...
Processing triggers for man-db (2.10.2-1) ...
Processing triggers for libc-bin (2.35-0ubuntu3) ...

Um zu überprüfen, ob smbclient korrekt installiert wurde, führen Sie aus:

smbclient --version

Sie sollten eine Ausgabe sehen, die die Version von smbclient anzeigt, die installiert wurde:

Version 4.15.5-Ubuntu

Nachdem wir smbclient installiert haben, können wir damit beginnen, mit SMB/CIFS-Freigaben zu interagieren.

Grundlagen von smbclient verstehen

Nachdem wir smbclient installiert haben, wollen wir seine grundlegende Verwendung und Syntax verstehen, bevor wir uns mit tatsächlichen SMB-Freigaben verbinden.

Befehlssyntax

Die grundlegende Syntax für den Befehl smbclient lautet:

smbclient //server/share -U username%password [options]

Wobei:

  • //server/share der UNC-Pfad (Universal Naming Convention) zur SMB-Freigabe ist
  • -U username%password den Benutzernamen und das Passwort für die Authentifizierung angibt
  • [options] zusätzliche Parameter sind, die Sie angeben können

Erstellen eines lokalen Verzeichnisses für Übungszwecke

Erstellen wir ein Verzeichnis, in dem wir Dateien speichern können, die wir möglicherweise von oder zu SMB-Freigaben übertragen möchten:

mkdir -p ~/project/smb-files

Erstellen wir eine Beispieldatei in diesem Verzeichnis, die wir später verwenden können:

echo "This is a test file for SMB transfer" > ~/project/smb-files/test.txt

Erkunden der smbclient-Hilfe

Um alle verfügbaren Optionen für smbclient anzuzeigen, verwenden Sie den Hilfe-Befehl:

smbclient --help

Dadurch wird ein langer Hilfetext mit allen verfügbaren Optionen angezeigt. Hier ist ein Ausschnitt davon:

Usage: smbclient [OPTION...] service <password>
  -M, --message=HOST                           Send message
  -I, --ip-address=IP                          Use this IP to connect to
  -E, --stderr                                 Write messages to stderr instead of stdout
  -L, --list=HOST                              Get a list of shares available on a host
  -T, --tar=<c|x>IXFvgbNan                     Command line tar
  -D, --directory=DIR                          Start from directory
...

Häufige smbclient-Befehle

Wenn Sie mit smbclient mit einer SMB-Freigabe verbunden sind, können Sie verschiedene Befehle verwenden, um Dateien zu navigieren und zu bearbeiten. Hier sind einige gängige Befehle:

  • ls oder dir: Dateien und Verzeichnisse auflisten
  • cd directory: In ein anderes Verzeichnis wechseln
  • get file [localfile]: Eine Datei von der Freigabe herunterladen
  • put file [remotefile]: Eine Datei auf die Freigabe hochladen
  • mget files...: Mehrere Dateien herunterladen
  • mput files...: Mehrere Dateien hochladen
  • mkdir directory: Ein Verzeichnis erstellen
  • rmdir directory: Ein Verzeichnis entfernen
  • rm file: Eine Datei löschen
  • help oder ?: Hilfe anzeigen
  • quit oder exit: smbclient beenden

Nachdem wir die Grundlagen von smbclient verstanden haben, werden wir im nächsten Schritt sehen, wie man sich mit einer tatsächlichen SMB-Freigabe verbindet.

Einrichten einer Test-SMB-Umgebung

In einem realen Szenario würden Sie sich mit einem tatsächlichen Windows- oder Samba-Server verbinden. Für dieses Labor simulieren wir jedoch eine SMB-Umgebung mithilfe eines lokalen Samba-Servers. Dieser Ansatz ermöglicht es uns, smbclient-Befehle zu üben, ohne Zugriff auf einen externen Server zu benötigen.

Installieren des Samba-Servers

Zuerst installieren wir das Samba-Server-Paket:

sudo apt install -y samba

Sie sollten eine Ausgabe sehen, die den Installationsprozess anzeigt:

Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following additional packages will be installed:
  attr python3-dnspython python3-gpg python3-ldb python3-markdown python3-pygments python3-samba samba-common samba-common-bin samba-dsdb-modules samba-libs samba-vfs-modules tdb-tools
Suggested packages:
  bind9 bind9utils ctdb ldb-tools ntp | chrony python-markdown-doc python-pygments-doc
The following NEW packages will be installed:
  attr python3-dnspython python3-gpg python3-ldb python3-markdown python3-pygments python3-samba samba samba-common samba-common-bin samba-dsdb-modules samba-libs samba-vfs-modules tdb-tools
0 upgraded, 14 newly installed, 0 to remove and 0 not upgraded.
Need to get 10.1 MB of archives.
After this operation, 51.3 MB of additional disk space will be used.
...

Erstellen einer Samba-Freigabe

Nun erstellen wir eine einfache Samba-Freigabekonfiguration. Zuerst sichern wir die ursprüngliche Konfigurationsdatei:

sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.backup

Erstellen Sie ein Verzeichnis, das freigegeben werden soll:

mkdir -p ~/project/samba-share

Erstellen wir eine Testdatei in diesem freigegebenen Verzeichnis:

echo "This is a test file in our Samba share" > ~/project/samba-share/shared-test.txt

Nun erstellen wir eine vereinfachte Samba-Konfiguration:

sudo bash -c 'cat > /etc/samba/smb.conf << EOF
[global]
   workgroup = WORKGROUP
   server string = Samba Server
   log file = /var/log/samba/log.%m
   max log size = 50
   security = user
   map to guest = bad user

[testshare]
   path = /home/labex/project/samba-share
   browseable = yes
   read only = no
   guest ok = yes
   force user = labex
EOF'

Fügen Sie den aktuellen Benutzer zu den Samba-Benutzern hinzu und legen Sie ein Passwort für Tests fest:

sudo smbpasswd -a labex

Geben Sie bei Aufforderung ein einfaches Passwort wie password ein (Sie müssen es zweimal eingeben):

New SMB password:
Retype new SMB password:
Added user labex.

Starten Sie den Samba-Dienst neu, um die Änderungen zu übernehmen:

sudo service smbd restart

Jetzt haben wir eine lokale Samba-Freigabe namens testshare auf unserem System eingerichtet. Wir können smbclient verwenden, um sich damit zu verbinden, als wäre es eine Remote-Windows-Freigabe.

Verbinden mit SMB-Freigaben mit smbclient

Nachdem wir unsere Test-SMB-Umgebung eingerichtet haben, verbinden wir uns mit der Freigabe mithilfe von smbclient.

Auflisten der verfügbaren Freigaben

Zuerst listen wir alle verfügbaren Freigaben auf unserer lokalen Maschine auf:

smbclient -L localhost -U labex

Geben Sie bei Aufforderung das Passwort ein, das Sie für den Samba-Benutzer festgelegt haben (z. B. password):

Enter WORKGROUP\labex's password:

Sie sollten eine Ausgabe ähnlich dieser sehen:

        Sharename       Type      Comment
        ---------       ----      -------
        testshare       Disk
        IPC$            IPC       IPC Service (Samba Server)
Reconnecting with SMB1 for workgroup listing.

        Server               Comment
        ---------            -------
        UBUNTU               Samba Server

        Workgroup            Master
        ---------            -------
        WORKGROUP            UBUNTU

Dies zeigt, dass unsere neu erstellte testshare-Freigabe verfügbar ist.

Verbinden mit der Freigabe

Verbinden wir uns nun mit der testshare-Freigabe:

smbclient //localhost/testshare -U labex

Geben Sie das Passwort ein, wenn Sie dazu aufgefordert werden:

Enter WORKGROUP\labex's password:

Nach erfolgreicher Verbindung sehen Sie die smbclient-Eingabeaufforderung:

Try "help" to get a list of possible commands.
smb: \>

Nachdem wir mit der Freigabe verbunden sind, wollen wir einige grundlegende Befehle erkunden:

Um Dateien im aktuellen Verzeichnis aufzulisten:

smb: \> ls

Sie sollten die Testdatei sehen, die wir zuvor erstellt haben:

  .                                   D        0  Tue Nov 30 12:00:00 2022
  ..                                  D        0  Tue Nov 30 12:00:00 2022
  shared-test.txt                     N       37  Tue Nov 30 12:00:00 2022

                8467839 blocks of size 4096. 3524491 blocks available

Erstellen eines Remote-Verzeichnisses

Erstellen wir ein neues Verzeichnis auf der SMB-Freigabe:

smb: \> mkdir test-directory

Listen Sie den Inhalt erneut auf, um zu überprüfen, ob das Verzeichnis erstellt wurde:

smb: \> ls

Sie sollten das neue Verzeichnis sehen:

  .                                   D        0  Tue Nov 30 12:01:00 2022
  ..                                  D        0  Tue Nov 30 12:00:00 2022
  shared-test.txt                     N       37  Tue Nov 30 12:00:00 2022
  test-directory                      D        0  Tue Nov 30 12:01:00 2022

                8467839 blocks of size 4096. 3524491 blocks available

Verzeichniswechsel

Wechseln wir in das Verzeichnis, das wir gerade erstellt haben:

smb: \> cd test-directory

Überprüfen Sie, ob wir uns im neuen Verzeichnis befinden:

smb: \test-directory\> ls

Die Ausgabe sollte ein leeres Verzeichnis anzeigen:

  .                                   D        0  Tue Nov 30 12:01:00 2022
  ..                                  D        0  Tue Nov 30 12:01:00 2022

                8467839 blocks of size 4096. 3524491 blocks available

Um zurück zum übergeordneten Verzeichnis zu gelangen:

smb: \test-directory\> cd ..

Hilfe innerhalb von smbclient abrufen

Um die verfügbaren Befehle innerhalb von smbclient anzuzeigen:

smb: \> help

Sie sehen eine Liste aller verfügbaren Befehle:

?              allinfo        altname        archive        backup
blocksize      cancel         case_sensitive cd             chmod
chown          close          del            dir            du
echo           exit           get            getfacl        geteas
hardlink       help           history        iosize         lcd
link           lock           lowercase      ls             l
mask           md             mget           mkdir          more
mput           newer          notify         open           posix
posix_encrypt  posix_open     posix_mkdir    posix_rmdir    posix_unlink
print          prompt         put            pwd            q
queue          quit           readlink       rd             recurse
reget          rename         reput          rm             rmdir
showacls       setea          setmode        stat           symlink
tar            tarmode        timeout        translate      unlock
volume         vuid           wdel           logon          listconnect
showconnect    tcon           tdis           tid            utimes
logoff         ..             !

Wenn Sie mit dem Erkunden fertig sind, können Sie die smbclient-Sitzung beenden:

smb: \> quit

Im nächsten Schritt erfahren wir, wie man Dateien zwischen dem Linux-System und SMB-Freigaben überträgt.

Übertragen von Dateien mit smbclient

In diesem letzten Schritt erfahren wir, wie man Dateien zwischen unserem Linux-System und der SMB-Freigabe überträgt.

Erneutes Verbinden mit der Freigabe

Verbinden wir uns erneut mit unserer SMB-Freigabe:

smbclient //localhost/testshare -U labex

Geben Sie das Passwort ein, wenn Sie dazu aufgefordert werden:

Enter WORKGROUP\labex's password:

Sie sollten die smbclient-Eingabeaufforderung sehen:

Try "help" to get a list of possible commands.
smb: \>

Hochladen von Dateien in die Freigabe

Laden wir die Testdatei, die wir zuvor erstellt haben, in die SMB-Freigabe hoch. Zuerst müssen wir unser aktuelles lokales Verzeichnis überprüfen:

smb: \> !pwd

Dies führt den Befehl pwd auf Ihrem lokalen System aus und sollte Folgendes anzeigen:

/home/labex/project

Wir müssen in das Verzeichnis wechseln, in dem sich unsere Testdatei befindet:

smb: \> lcd ~/project/smb-files

Überprüfen Sie, ob wir uns im richtigen Verzeichnis befinden:

smb: \> !ls

Sie sollten Folgendes sehen:

test.txt

Laden wir nun die Datei in die SMB-Freigabe hoch:

smb: \> put test.txt

Sie sollten eine Meldung sehen, die anzeigt, dass die Datei übertragen wurde:

putting file test.txt as \test.txt (38.5 kb/s) (average 38.5 kb/s)

Überprüfen Sie, ob die Datei hochgeladen wurde:

smb: \> ls

Sie sollten Folgendes sehen:

  .                                   D        0  Tue Nov 30 12:02:00 2022
  ..                                  D        0  Tue Nov 30 12:00:00 2022
  shared-test.txt                     N       37  Tue Nov 30 12:00:00 2022
  test-directory                      D        0  Tue Nov 30 12:01:00 2022
  test.txt                            N       33  Tue Nov 30 12:02:00 2022

                8467839 blocks of size 4096. 3524491 blocks available

Herunterladen von Dateien von der Freigabe

Laden wir nun eine Datei von der SMB-Freigabe auf unser lokales System herunter. Erstellen wir zuerst ein neues Verzeichnis, um die heruntergeladenen Dateien zu speichern:

smb: \> !mkdir -p ~/project/smb-downloads

Wechseln Sie in dieses Verzeichnis:

smb: \> lcd ~/project/smb-downloads

Laden Sie nun die Datei herunter:

smb: \> get shared-test.txt

Sie sollten eine Meldung sehen, die anzeigt, dass die Datei übertragen wurde:

getting file \shared-test.txt of size 37 as shared-test.txt (37.0 KiloBytes/sec) (average 37.0 KiloBytes/sec)

Überprüfen Sie, ob die Datei heruntergeladen wurde:

smb: \> !ls

Sie sollten Folgendes sehen:

shared-test.txt

Verwenden von mget und mput für mehrere Dateien

Die Befehle mget und mput ermöglichen es Ihnen, mehrere Dateien gleichzeitig zu übertragen. Versuchen wir, ein paar weitere Dateien auf unserem lokalen System zu erstellen:

smb: \> !cd ~/project/smb-files && touch file1.txt file2.txt file3.txt

Laden wir nun alle .txt-Dateien gleichzeitig hoch:

smb: \> lcd ~/project/smb-files
smb: \> mput *.txt

Für jede Datei werden Sie nach einer Bestätigung gefragt. Geben Sie Y ein, um jede Übertragung zu bestätigen:

mput test.txt? Y
putting file test.txt as \test.txt (38.5 kb/s) (average 38.5 kb/s)
mput file1.txt? Y
putting file file1.txt as \file1.txt (0.0 kb/s) (average 19.2 kb/s)
mput file2.txt? Y
putting file file2.txt as \file2.txt (0.0 kb/s) (average 12.8 kb/s)
mput file3.txt? Y
putting file file3.txt as \file3.txt (0.0 kb/s) (average 9.6 kb/s)

Wenn Sie alle Dateien ohne Bestätigung übertragen möchten, können Sie die Abfrage deaktivieren:

smb: \> prompt
smb: \> mput *.txt

Ebenso zum Herunterladen mehrerer Dateien:

smb: \> lcd ~/project/smb-downloads
smb: \> mget *.txt

Wenn Sie fertig sind, beenden Sie die smbclient-Sitzung:

smb: \> quit

Nicht-interaktive Befehle

Sie können smbclient auch verwenden, um Befehle auszuführen, ohne die interaktive Shell aufzurufen. Um beispielsweise den Inhalt einer Freigabe aufzulisten:

smbclient //localhost/testshare -U labex -c 'ls'

Geben Sie das Passwort ein, wenn Sie dazu aufgefordert werden, und Sie sehen die Verzeichnisauflistung:

Enter WORKGROUP\labex's password:
  .                                   D        0  Tue Nov 30 12:03:00 2022
  ..                                  D        0  Tue Nov 30 12:00:00 2022
  file1.txt                           N        0  Tue Nov 30 12:03:00 2022
  file2.txt                           N        0  Tue Nov 30 12:03:00 2022
  file3.txt                           N        0  Tue Nov 30 12:03:00 2022
  shared-test.txt                     N       37  Tue Nov 30 12:00:00 2022
  test-directory                      D        0  Tue Nov 30 12:01:00 2022
  test.txt                            N       33  Tue Nov 30 12:03:00 2022

                8467839 blocks of size 4096. 3524491 blocks available

Um eine Datei mit einem einzigen Befehl herunterzuladen:

smbclient //localhost/testshare -U labex -c 'get test.txt /home/labex/project/test-download.txt'

Dieser Befehl lädt die Datei test.txt von der Freigabe herunter und speichert sie als test-download.txt in Ihrem Projektverzeichnis.

Sie haben jetzt ein gutes Verständnis dafür, wie man smbclient verwendet, um sich mit SMB-Freigaben zu verbinden, Verzeichnisse zu navigieren und Dateien zu übertragen. Diese Fähigkeiten sind unerlässlich, wenn Sie in gemischten Windows/Linux-Umgebungen arbeiten.

Zusammenfassung

In diesem Lab haben wir den Befehl smbclient in Linux untersucht, der ein wichtiges Werkzeug zum Verbinden von Linux-Systemen mit Windows (SMB/CIFS)-Dateifreigaben bereitstellt. Wir haben verschiedene wichtige Aspekte der Arbeit mit smbclient behandelt:

  1. Installation: Wir haben das Paket smbclient auf Ubuntu 22.04 installiert, das seine Abhängigkeiten enthielt.

  2. Grundlagen der Befehle: Wir haben die grundlegende Syntax und die in smbclient verfügbaren Befehle kennengelernt, einschließlich der Verbindung zu Freigaben und der Navigation innerhalb dieser.

  3. Einrichten einer Testumgebung: Wir haben eine Test-SMB-Umgebung mit einem lokalen Samba-Server erstellt, um unsere Befehle zu üben, ohne Zugriff auf einen externen Windows-Server zu benötigen.

  4. Verbinden mit Freigaben: Wir haben uns mit unserer Test-SMB-Freigabe verbunden und Navigationsbefehle wie ls, cd und mkdir erkundet.

  5. Übertragen von Dateien: Wir haben gelernt, wie man Dateien mit put in eine SMB-Freigabe hochlädt und Dateien mit get herunterlädt. Wir haben auch die Übertragung mehrerer Dateien mit mput und mget untersucht.

Die Fähigkeiten, die Sie in diesem Lab erworben haben, sind direkt auf reale Szenarien anwendbar, in denen Sie mit Windows-Systemen oder -Servern aus Linux-Umgebungen interagieren müssen. Ob Sie Dateien zwischen Systemen übertragen, Backups automatisieren oder Linux-Systeme in Windows-Netzwerke integrieren, smbclient bietet eine leistungsstarke Befehlszeilenschnittstelle für diese Aufgaben.

Für komplexere oder häufigere Dateioperationen sollten Sie in Erwägung ziehen, SMB-Freigaben direkt in Ihr Linux-Dateisystem mit dem Befehl mount mit dem Dateisystemtyp cifs einzubinden, der auf den hier gelernten Konzepten aufbaut.

Linux Commands Cheat Sheet