Commande smbclient Linux : Exemples Pratiques

LinuxBeginner
Pratiquer maintenant

Introduction

Dans ce laboratoire, nous allons explorer la commande Linux smbclient et ses applications pratiques. L'utilitaire smbclient est un outil puissant qui permet aux systèmes Linux d'interagir avec les partages de fichiers Windows (partages SMB/CIFS). SMB (Server Message Block) est un protocole réseau utilisé par Windows pour le partage de fichiers, et smbclient permet aux utilisateurs Linux d'accéder à ces partages.

Nous commencerons par installer smbclient sur notre système Ubuntu 22.04, apprendrons la syntaxe de base de la commande, puis démontrerons comment se connecter aux partages Windows, naviguer dans les répertoires et transférer des fichiers.

À la fin de ce laboratoire, vous serez capable de :

  • Installer et configurer l'utilitaire smbclient
  • Se connecter aux partages Windows depuis Linux
  • Naviguer et lister les fichiers sur les partages Windows
  • Transférer des fichiers entre les systèmes Linux et Windows

Linux Commands Cheat Sheet

Installation de smbclient sur Ubuntu 22.04

Le paquet smbclient est un outil en ligne de commande qui permet aux systèmes Linux d'interagir avec les partages de fichiers SMB/CIFS couramment utilisés dans les environnements Windows. Dans cette étape, nous allons installer ce paquet sur notre système Ubuntu.

Commençons par mettre à jour l'index des paquets pour nous assurer d'obtenir la dernière version :

sudo apt update

Vous devriez voir une sortie similaire à celle-ci :

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

Maintenant, installons le paquet smbclient :

sudo apt install -y smbclient

La sortie ressemblera à ceci :

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) ...

Pour vérifier que smbclient a été installé correctement, exécutez :

smbclient --version

Vous devriez voir une sortie indiquant la version de smbclient qui a été installée :

Version 4.15.5-Ubuntu

Maintenant que nous avons installé smbclient, nous pouvons commencer à l'utiliser pour interagir avec les partages SMB/CIFS.

Comprendre les bases de smbclient

Maintenant que nous avons installé smbclient, comprenons son utilisation et sa syntaxe de base avant de nous connecter à des partages SMB réels.

Syntaxe de la commande

La syntaxe de base de la commande smbclient est la suivante :

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

Où :

  • //server/share est le chemin UNC (Universal Naming Convention) vers le partage SMB
  • -U username%password spécifie le nom d'utilisateur et le mot de passe pour l'authentification
  • [options] sont des paramètres supplémentaires que vous pouvez fournir

Création d'un répertoire local pour la pratique

Créons un répertoire où nous pourrons stocker les fichiers que nous pourrions vouloir transférer vers ou depuis des partages SMB :

mkdir -p ~/project/smb-files

Créons un exemple de fichier dans ce répertoire que nous pourrons utiliser plus tard :

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

Exploration de l'aide de smbclient

Pour voir toutes les options disponibles pour smbclient, utilisez la commande d'aide :

smbclient --help

Cela affichera un texte d'aide détaillé avec toutes les options disponibles. Voici un extrait de ce que vous pourriez voir :

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
...

Commandes smbclient courantes

Lorsque vous êtes connecté à un partage SMB avec smbclient, vous pouvez utiliser diverses commandes pour naviguer et opérer sur les fichiers. Voici quelques commandes courantes :

  • ls ou dir: Lister les fichiers et les répertoires
  • cd directory: Changer de répertoire
  • get file [localfile]: Télécharger un fichier depuis le partage
  • put file [remotefile]: Télécharger un fichier vers le partage
  • mget files...: Télécharger plusieurs fichiers
  • mput files...: Télécharger plusieurs fichiers
  • mkdir directory: Créer un répertoire
  • rmdir directory: Supprimer un répertoire
  • rm file: Supprimer un fichier
  • help ou ?: Afficher l'aide
  • quit ou exit: Quitter smbclient

Maintenant que nous comprenons les bases de smbclient, dans l'étape suivante, nous verrons comment nous connecter à un partage SMB réel.

Configuration d'un environnement SMB de test

Dans un scénario réel, vous vous connecteriez à un serveur Windows ou Samba réel. Cependant, pour ce laboratoire, nous allons simuler un environnement SMB en utilisant un serveur Samba local. Cette approche nous permet de pratiquer les commandes smbclient sans avoir besoin d'accéder à un serveur externe.

Installation du serveur Samba

Tout d'abord, installons le paquet du serveur Samba :

sudo apt install -y samba

Vous devriez voir une sortie indiquant le processus d'installation :

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.
...

Création d'un partage Samba

Maintenant, créons une configuration de partage Samba simple. Tout d'abord, sauvegardons le fichier de configuration d'origine :

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

Créez un répertoire à partager :

mkdir -p ~/project/samba-share

Créons un fichier de test dans ce répertoire partagé :

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

Maintenant, créons une configuration Samba simplifiée :

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'

Ajoutez l'utilisateur actuel aux utilisateurs Samba et définissez un mot de passe pour les tests :

sudo smbpasswd -a labex

Lorsque vous y êtes invité, entrez un mot de passe simple comme password (vous devrez le taper deux fois) :

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

Redémarrez le service Samba pour appliquer les modifications :

sudo service smbd restart

Nous avons maintenant un partage Samba local appelé testshare configuré sur notre système. Nous pouvons utiliser smbclient pour nous y connecter comme s'il s'agissait d'un partage Windows distant.

Connexion aux partages SMB avec smbclient

Maintenant que notre environnement SMB de test est configuré, connectons-nous au partage en utilisant smbclient.

Lister les partages disponibles

Tout d'abord, listons tous les partages disponibles sur notre machine locale :

smbclient -L localhost -U labex

Lorsque vous y êtes invité, entrez le mot de passe que vous avez défini pour l'utilisateur Samba (par exemple, password) :

Enter WORKGROUP\labex's password:

Vous devriez voir une sortie similaire à celle-ci :

        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

Cela montre que notre partage testshare nouvellement créé est disponible.

Connexion au partage

Maintenant, connectons-nous au partage testshare :

smbclient //localhost/testshare -U labex

Entrez le mot de passe lorsque vous y êtes invité :

Enter WORKGROUP\labex's password:

Après une connexion réussie, vous verrez l'invite de smbclient :

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

Maintenant que nous sommes connectés au partage, explorons quelques commandes de base :

Pour lister les fichiers dans le répertoire courant :

smb: \> ls

Vous devriez voir le fichier de test que nous avons créé précédemment :

  .                                   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

Création d'un répertoire distant

Créons un nouveau répertoire sur le partage SMB :

smb: \> mkdir test-directory

Listez à nouveau le contenu pour vérifier que le répertoire a été créé :

smb: \> ls

Vous devriez voir le nouveau répertoire :

  .                                   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

Changement de répertoire

Changeons de répertoire vers celui que nous venons de créer :

smb: \> cd test-directory

Vérifiez que nous sommes dans le nouveau répertoire :

smb: \test-directory\> ls

La sortie devrait afficher un répertoire vide :

  .                                   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

Pour revenir au répertoire parent :

smb: \test-directory\> cd ..

Obtenir de l'aide dans smbclient

Pour voir les commandes disponibles dans smbclient :

smb: \> help

Vous verrez une liste de toutes les commandes disponibles :

?              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         ..             !

Lorsque vous avez terminé d'explorer, vous pouvez quitter la session smbclient :

smb: \> quit

Dans l'étape suivante, nous apprendrons à transférer des fichiers entre le système Linux et les partages SMB.

Transfert de fichiers avec smbclient

Dans cette dernière étape, nous allons apprendre à transférer des fichiers entre notre système Linux et le partage SMB.

Reconnexion au partage

Connectons-nous à nouveau à notre partage SMB :

smbclient //localhost/testshare -U labex

Entrez le mot de passe lorsque vous y êtes invité :

Enter WORKGROUP\labex's password:

Vous devriez voir l'invite de smbclient :

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

Téléversement de fichiers vers le partage

Téléversons le fichier de test que nous avons créé précédemment vers le partage SMB. Tout d'abord, nous devons vérifier notre répertoire local actuel :

smb: \> !pwd

Cela exécute la commande pwd sur votre système local et devrait afficher :

/home/labex/project

Nous devons changer de répertoire vers celui où se trouve notre fichier de test :

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

Vérifiez que nous sommes dans le bon répertoire :

smb: \> !ls

Vous devriez voir :

test.txt

Maintenant, téléversons le fichier vers le partage SMB :

smb: \> put test.txt

Vous devriez voir un message indiquant que le fichier a été transféré :

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

Vérifiez que le fichier a été téléversé :

smb: \> ls

Vous devriez voir :

  .                                   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

Téléchargement de fichiers depuis le partage

Maintenant, téléchargeons un fichier du partage SMB vers notre système local. Tout d'abord, créons un nouveau répertoire pour stocker les fichiers téléchargés :

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

Changez de répertoire vers celui-ci :

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

Maintenant, téléchargez le fichier :

smb: \> get shared-test.txt

Vous devriez voir un message indiquant que le fichier a été transféré :

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

Vérifiez que le fichier a été téléchargé :

smb: \> !ls

Vous devriez voir :

shared-test.txt

Utilisation de mget et mput pour plusieurs fichiers

Les commandes mget et mput vous permettent de transférer plusieurs fichiers à la fois. Essayons de créer quelques fichiers supplémentaires sur notre système local :

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

Maintenant, téléversons tous les fichiers .txt à la fois :

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

Pour chaque fichier, vous serez invité à confirmer. Tapez Y pour confirmer chaque transfert :

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)

Si vous souhaitez transférer tous les fichiers sans confirmation, vous pouvez désactiver l'invite :

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

De même, pour télécharger plusieurs fichiers :

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

Lorsque vous avez terminé, quittez la session smbclient :

smb: \> quit

Commandes non interactives

Vous pouvez également utiliser smbclient pour exécuter des commandes sans entrer dans l'interpréteur de commandes interactif. Par exemple, pour lister le contenu d'un partage :

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

Entrez le mot de passe lorsque vous y êtes invité, et vous verrez la liste des répertoires :

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

Pour télécharger un fichier en une seule commande :

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

Cette commande télécharge le fichier test.txt du partage et l'enregistre sous le nom test-download.txt dans votre répertoire de projet.

Vous avez maintenant une bonne compréhension de la façon d'utiliser smbclient pour vous connecter aux partages SMB, naviguer dans les répertoires et transférer des fichiers. Ces compétences sont essentielles lorsque vous travaillez dans des environnements mixtes Windows/Linux.

Résumé

Dans ce laboratoire, nous avons exploré la commande smbclient sous Linux, qui fournit un outil essentiel pour connecter les systèmes Linux aux partages de fichiers Windows (SMB/CIFS). Nous avons couvert plusieurs aspects clés de l'utilisation de smbclient :

  1. Installation : Nous avons installé le paquet smbclient sur Ubuntu 22.04, ce qui incluait ses dépendances.

  2. Principes de base des commandes : Nous avons appris la syntaxe de base et les commandes disponibles dans smbclient, y compris comment se connecter aux partages et naviguer à l'intérieur.

  3. Configuration d'un environnement de test : Nous avons créé un environnement SMB de test en utilisant un serveur Samba local pour pratiquer nos commandes sans avoir besoin d'accéder à un serveur Windows externe.

  4. Connexion aux partages : Nous nous sommes connectés à notre partage SMB de test et avons exploré les commandes de navigation telles que ls, cd et mkdir.

  5. Transfert de fichiers : Nous avons appris à téléverser des fichiers vers un partage SMB en utilisant put et à télécharger des fichiers en utilisant get. Nous avons également exploré les transferts de fichiers multiples avec mput et mget.

Les compétences que vous avez acquises dans ce laboratoire sont directement applicables aux scénarios réels où vous devez interagir avec des systèmes ou des serveurs Windows à partir d'environnements Linux. Que vous transfériez des fichiers entre des systèmes, automatisiez des sauvegardes ou intégriez des systèmes Linux dans des réseaux Windows, smbclient fournit une interface en ligne de commande puissante pour ces tâches.

Pour des opérations de fichiers plus complexes ou fréquentes, vous souhaiterez peut-être explorer le montage des partages SMB directement dans votre système de fichiers Linux en utilisant la commande mount avec le type de système de fichiers cifs, qui s'appuie sur les concepts que nous avons appris ici.

Linux Commands Cheat Sheet