Comando smbclient no Linux com Exemplos Práticos

LinuxBeginner
Pratique Agora

Introdução

Neste laboratório, exploraremos o comando Linux smbclient e suas aplicações práticas. O utilitário smbclient é uma ferramenta poderosa que permite aos sistemas Linux interagir com compartilhamentos de arquivos Windows (compartilhamentos SMB/CIFS). SMB (Server Message Block) é um protocolo de rede que o Windows usa para compartilhamento de arquivos, e smbclient permite que usuários Linux acessem esses compartilhamentos.

Começaremos instalando o smbclient em nosso sistema Ubuntu 22.04, aprenderemos a sintaxe básica do comando e, em seguida, demonstraremos como conectar a compartilhamentos Windows, navegar por diretórios e transferir arquivos.

Ao final deste laboratório, você será capaz de:

  • Instalar e configurar o utilitário smbclient
  • Conectar a compartilhamentos Windows a partir do Linux
  • Navegar e listar arquivos em compartilhamentos Windows
  • Transferir arquivos entre sistemas Linux e Windows

Linux Commands Cheat Sheet

Este é um Lab Guiado, que fornece instruções passo a passo para ajudá-lo a aprender e praticar. Siga as instruções cuidadosamente para completar cada etapa e ganhar experiência prática. Dados históricos mostram que este é um laboratório de nível avançado com uma taxa de conclusão de 24%. Recebeu uma taxa de avaliações positivas de 100% dos estudantes.

Instalando smbclient no Ubuntu 22.04

O pacote smbclient é uma ferramenta de linha de comando que permite aos sistemas Linux interagir com compartilhamentos de arquivos SMB/CIFS, comumente usados em ambientes Windows. Nesta etapa, instalaremos este pacote em nosso sistema Ubuntu.

Primeiro, vamos atualizar o índice de pacotes para garantir que obtemos a versão mais recente:

sudo apt update

Você deve ver uma saída semelhante a esta:

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

Agora, vamos instalar o pacote smbclient:

sudo apt install -y smbclient

A saída será algo parecido com isto:

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

Para verificar se o smbclient foi instalado corretamente, execute:

smbclient --version

Você deve ver uma saída mostrando a versão do smbclient que foi instalada:

Version 4.15.5-Ubuntu

Agora que instalamos o smbclient, podemos começar a usá-lo para interagir com compartilhamentos SMB/CIFS.

Entendendo os Fundamentos do smbclient

Agora que instalamos o smbclient, vamos entender seu uso básico e sintaxe antes de conectar a compartilhamentos SMB reais.

Sintaxe do Comando

A sintaxe básica para o comando smbclient é:

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

Onde:

  • //server/share é o caminho UNC (Convenção Universal de Nomenclatura) para o compartilhamento SMB
  • -U username%password especifica o nome de usuário e a senha para autenticação
  • [options] são parâmetros adicionais que você pode fornecer

Criando um Diretório Local para Prática

Vamos criar um diretório onde podemos armazenar arquivos que podemos querer transferir de ou para compartilhamentos SMB:

mkdir -p ~/project/smb-files

Vamos criar um arquivo de exemplo neste diretório que podemos usar mais tarde:

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

Explorando a Ajuda do smbclient

Para ver todas as opções disponíveis para smbclient, use o comando de ajuda:

smbclient --help

Isso exibirá um texto de ajuda extenso com todas as opções disponíveis. Aqui está um trecho do que você pode ver:

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

Comandos Comuns do smbclient

Quando você estiver conectado a um compartilhamento SMB com smbclient, você pode usar vários comandos para navegar e operar em arquivos. Aqui estão alguns comandos comuns:

  • ls ou dir: Listar arquivos e diretórios
  • cd directory: Mudar para um diretório diferente
  • get file [localfile]: Baixar um arquivo do compartilhamento
  • put file [remotefile]: Carregar um arquivo para o compartilhamento
  • mget files...: Baixar múltiplos arquivos
  • mput files...: Carregar múltiplos arquivos
  • mkdir directory: Criar um diretório
  • rmdir directory: Remover um diretório
  • rm file: Excluir um arquivo
  • help ou ?: Exibir ajuda
  • quit ou exit: Sair do smbclient

Agora que entendemos os fundamentos do smbclient, na próxima etapa, veremos como conectar a um compartilhamento SMB real.

Configurando um Ambiente SMB de Teste

Em um cenário do mundo real, você se conectaria a um servidor Windows ou Samba real. No entanto, para este laboratório, simularemos um ambiente SMB usando um servidor Samba local. Essa abordagem nos permite praticar os comandos smbclient sem exigir acesso a um servidor externo.

Instalando o Servidor Samba

Primeiro, vamos instalar o pacote do servidor Samba:

sudo apt install -y samba

Você deve ver uma saída indicando o processo de instalação:

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

Criando um Compartilhamento Samba

Agora, vamos criar uma configuração simples de compartilhamento Samba. Primeiro, vamos fazer um backup do arquivo de configuração original:

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

Crie um diretório para compartilhar:

mkdir -p ~/project/samba-share

Vamos criar um arquivo de teste neste diretório compartilhado:

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

Agora, vamos criar uma configuração Samba simplificada:

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'

Adicione o usuário atual aos usuários Samba e defina uma senha para teste:

sudo smbpasswd -a labex

Quando solicitado, insira uma senha simples como password (você precisará digitá-la duas vezes):

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

Reinicie o serviço Samba para aplicar as alterações:

sudo service smbd restart

Agora temos um compartilhamento Samba local chamado testshare configurado em nosso sistema. Podemos usar o smbclient para nos conectar a ele como se fosse um compartilhamento Windows remoto.

Conectando a Compartilhamentos SMB com smbclient

Agora que configuramos nosso ambiente SMB de teste, vamos nos conectar ao compartilhamento usando smbclient.

Listando Compartilhamentos Disponíveis

Primeiro, vamos listar todos os compartilhamentos disponíveis em nossa máquina local:

smbclient -L localhost -U labex

Quando solicitado, insira a senha que você definiu para o usuário Samba (por exemplo, password):

Enter WORKGROUP\labex's password:

Você deve ver uma saída semelhante a esta:

        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

Isso mostra que nosso compartilhamento testshare recém-criado está disponível.

Conectando ao Compartilhamento

Agora, vamos nos conectar ao compartilhamento testshare:

smbclient //localhost/testshare -U labex

Insira a senha quando solicitado:

Enter WORKGROUP\labex's password:

Após uma conexão bem-sucedida, você verá o prompt do smbclient:

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

Agora que estamos conectados ao compartilhamento, vamos explorar alguns comandos básicos:

Para listar arquivos no diretório atual:

smb: \> ls

Você deve ver o arquivo de teste que criamos anteriormente:

  .                                   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

Criando um Diretório Remoto

Vamos criar um novo diretório no compartilhamento SMB:

smb: \> mkdir test-directory

Liste o conteúdo novamente para verificar se o diretório foi criado:

smb: \> ls

Você deve ver o novo diretório:

  .                                   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

Mudando de Diretório

Vamos mudar para o diretório que acabamos de criar:

smb: \> cd test-directory

Verifique se estamos no novo diretório:

smb: \test-directory\> ls

A saída deve mostrar um diretório vazio:

  .                                   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

Para voltar ao diretório pai:

smb: \test-directory\> cd ..

Obtendo Ajuda Dentro do smbclient

Para ver os comandos disponíveis dentro do smbclient:

smb: \> help

Você verá uma lista de todos os comandos disponíveis:

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

Quando terminar de explorar, você pode sair da sessão do smbclient:

smb: \> quit

Na próxima etapa, aprenderemos como transferir arquivos entre o sistema Linux e os compartilhamentos SMB.

Transferindo Arquivos com smbclient

Nesta etapa final, aprenderemos como transferir arquivos entre nosso sistema Linux e o compartilhamento SMB.

Reconectando ao Compartilhamento

Vamos nos conectar novamente ao nosso compartilhamento SMB:

smbclient //localhost/testshare -U labex

Insira a senha quando solicitado:

Enter WORKGROUP\labex's password:

Você deve ver o prompt do smbclient:

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

Carregando Arquivos para o Compartilhamento

Vamos carregar o arquivo de teste que criamos anteriormente para o compartilhamento SMB. Primeiro, precisamos verificar nosso diretório local atual:

smb: \> !pwd

Isso executa o comando pwd em seu sistema local e deve exibir:

/home/labex/project

Precisamos mudar para o diretório onde nosso arquivo de teste está localizado:

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

Verifique se estamos no diretório correto:

smb: \> !ls

Você deve ver:

test.txt

Agora, vamos carregar o arquivo para o compartilhamento SMB:

smb: \> put test.txt

Você deve ver uma mensagem indicando que o arquivo foi transferido:

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

Verifique se o arquivo foi carregado:

smb: \> ls

Você deve ver:

  .                                   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

Baixando Arquivos do Compartilhamento

Agora, vamos baixar um arquivo do compartilhamento SMB para nosso sistema local. Primeiro, vamos criar um novo diretório para armazenar os arquivos baixados:

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

Mude para esse diretório:

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

Agora, baixe o arquivo:

smb: \> get shared-test.txt

Você deve ver uma mensagem indicando que o arquivo foi transferido:

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

Verifique se o arquivo foi baixado:

smb: \> !ls

Você deve ver:

shared-test.txt

Usando mget e mput para Vários Arquivos

Os comandos mget e mput permitem que você transfira vários arquivos de uma vez. Vamos tentar criar mais alguns arquivos em nosso sistema local:

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

Agora, vamos carregar todos os arquivos .txt de uma vez:

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

Para cada arquivo, você será solicitado a confirmar. Digite Y para confirmar cada transferência:

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)

Se você quiser transferir todos os arquivos sem confirmação, pode desativar a solicitação:

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

Da mesma forma, para baixar vários arquivos:

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

Quando terminar, saia da sessão do smbclient:

smb: \> quit

Comandos Não Interativos

Você também pode usar smbclient para executar comandos sem entrar no shell interativo. Por exemplo, para listar o conteúdo de um compartilhamento:

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

Insira a senha quando solicitado e você verá a listagem do diretório:

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

Para baixar um arquivo em um único comando:

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

Este comando baixa o arquivo test.txt do compartilhamento e o salva como test-download.txt em seu diretório de projeto.

Agora você tem uma boa compreensão de como usar smbclient para se conectar a compartilhamentos SMB, navegar em diretórios e transferir arquivos. Essas habilidades são essenciais ao trabalhar em ambientes mistos Windows/Linux.

Resumo

Neste laboratório, exploramos o comando smbclient no Linux, que fornece uma ferramenta essencial para conectar sistemas Linux a compartilhamentos de arquivos Windows (SMB/CIFS). Cobrimos vários aspectos-chave do trabalho com smbclient:

  1. Instalação: Instalamos o pacote smbclient no Ubuntu 22.04, que incluiu suas dependências.

  2. Comandos Básicos: Aprendemos sobre a sintaxe básica e os comandos disponíveis no smbclient, incluindo como se conectar a compartilhamentos e navegar neles.

  3. Configurando um Ambiente de Teste: Criamos um ambiente SMB de teste usando um servidor Samba local para praticar nossos comandos sem exigir acesso a um servidor Windows externo.

  4. Conectando a Compartilhamentos: Conectamos ao nosso compartilhamento SMB de teste e exploramos comandos de navegação como ls, cd e mkdir.

  5. Transferindo Arquivos: Aprendemos como carregar arquivos para um compartilhamento SMB usando put e baixar arquivos usando get. Também exploramos transferências de vários arquivos com mput e mget.

As habilidades que você adquiriu neste laboratório são diretamente aplicáveis a cenários do mundo real onde você precisa interagir com sistemas ou servidores Windows a partir de ambientes Linux. Seja transferindo arquivos entre sistemas, automatizando backups ou integrando sistemas Linux em redes Windows, smbclient fornece uma poderosa interface de linha de comando para essas tarefas.

Para operações de arquivos mais complexas ou frequentes, você pode querer explorar a montagem de compartilhamentos SMB diretamente em seu sistema de arquivos Linux usando o comando mount com o tipo de sistema de arquivos cifs, que se baseia nos conceitos que aprendemos aqui.

Folha de Dicas de Comandos Linux