Introducción
En este laboratorio, exploraremos el comando smbclient de Linux y sus aplicaciones prácticas. La utilidad smbclient es una herramienta poderosa que permite a los sistemas Linux interactuar con los recursos compartidos de archivos de Windows (recursos compartidos SMB/CIFS). SMB (Server Message Block) es un protocolo de red que Windows utiliza para compartir archivos, y smbclient permite a los usuarios de Linux acceder a estos recursos compartidos.
Comenzaremos instalando smbclient en nuestro sistema Ubuntu 22.04, aprenderemos la sintaxis básica del comando y luego demostraremos cómo conectarse a los recursos compartidos de Windows, navegar por directorios y transferir archivos.
Al final de este laboratorio, podrás:
- Instalar y configurar la utilidad
smbclient - Conectarte a los recursos compartidos de Windows desde Linux
- Navegar y listar archivos en los recursos compartidos de Windows
- Transferir archivos entre sistemas Linux y Windows
Instalación de smbclient en Ubuntu 22.04
El paquete smbclient es una herramienta de línea de comandos que permite a los sistemas Linux interactuar con los recursos compartidos de archivos SMB/CIFS, comúnmente utilizados en entornos Windows. En este paso, instalaremos este paquete en nuestro sistema Ubuntu.
Primero, actualicemos el índice de paquetes para asegurarnos de obtener la última versión:
sudo apt update
Deberías ver una salida similar 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
Ahora, instalemos el paquete smbclient:
sudo apt install -y smbclient
La salida se verá algo así:
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 que smbclient se ha instalado correctamente, ejecuta:
smbclient --version
Deberías ver una salida que muestre la versión de smbclient que se instaló:
Version 4.15.5-Ubuntu
Ahora que hemos instalado smbclient, podemos comenzar a usarlo para interactuar con los recursos compartidos SMB/CIFS.
Comprender los conceptos básicos de smbclient
Ahora que hemos instalado smbclient, comprendamos su uso y sintaxis básicos antes de conectarnos a los recursos compartidos SMB reales.
Sintaxis del comando
La sintaxis básica para el comando smbclient es:
smbclient //server/share -U username%password [options]
Donde:
//server/sharees la ruta UNC (Convención de Nombres Universal) al recurso compartido SMB-U username%passwordespecifica el nombre de usuario y la contraseña para la autenticación[options]son parámetros adicionales que puedes proporcionar
Creación de un directorio local para la práctica
Creemos un directorio donde podamos almacenar archivos que podríamos querer transferir hacia o desde recursos compartidos SMB:
mkdir -p ~/project/smb-files
Creemos un archivo de muestra en este directorio que podemos usar más tarde:
echo "This is a test file for SMB transfer" > ~/project/smb-files/test.txt
Explorando la ayuda de smbclient
Para ver todas las opciones disponibles para smbclient, usa el comando de ayuda:
smbclient --help
Esto mostrará un texto de ayuda extenso con todas las opciones disponibles. Aquí hay un fragmento de lo que podrías 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 comunes de smbclient
Cuando estás conectado a un recurso compartido SMB con smbclient, puedes usar varios comandos para navegar y operar en archivos. Aquí hay algunos comandos comunes:
lsodir: Listar archivos y directorioscd directory: Cambiar a un directorio diferenteget file [localfile]: Descargar un archivo del recurso compartidoput file [remotefile]: Subir un archivo al recurso compartidomget files...: Descargar múltiples archivosmput files...: Subir múltiples archivosmkdir directory: Crear un directoriormdir directory: Eliminar un directoriorm file: Eliminar un archivohelpo?: Mostrar ayudaquitoexit: Salir de smbclient
Ahora que entendemos los conceptos básicos de smbclient, en el siguiente paso, veremos cómo conectarnos a un recurso compartido SMB real.
Configuración de un entorno SMB de prueba
En un escenario del mundo real, te conectarías a un servidor Windows o Samba real. Sin embargo, para este laboratorio, simularemos un entorno SMB utilizando un servidor Samba local. Este enfoque nos permite practicar los comandos de smbclient sin requerir acceso a un servidor externo.
Instalación del servidor Samba
Primero, instalemos el paquete del servidor Samba:
sudo apt install -y samba
Deberías ver una salida que indica el proceso de instalación:
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.
...
Creación de un recurso compartido Samba
Ahora, creemos una configuración simple de recurso compartido Samba. Primero, hagamos una copia de seguridad del archivo de configuración original:
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.backup
Crea un directorio para compartir:
mkdir -p ~/project/samba-share
Creemos un archivo de prueba en este directorio compartido:
echo "This is a test file in our Samba share" > ~/project/samba-share/shared-test.txt
Ahora, creemos una configuración 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'
Agrega el usuario actual a los usuarios de Samba y establece una contraseña para las pruebas:
sudo smbpasswd -a labex
Cuando se te solicite, ingresa una contraseña simple como password (tendrás que escribirla dos veces):
New SMB password:
Retype new SMB password:
Added user labex.
Reinicia el servicio Samba para aplicar los cambios:
sudo service smbd restart
Ahora tenemos un recurso compartido Samba local llamado testshare configurado en nuestro sistema. Podemos usar smbclient para conectarnos a él como si fuera un recurso compartido de Windows remoto.
Conexión a recursos compartidos SMB con smbclient
Ahora que tenemos nuestro entorno SMB de prueba configurado, conectémonos al recurso compartido usando smbclient.
Listado de recursos compartidos disponibles
Primero, enumeremos todos los recursos compartidos disponibles en nuestra máquina local:
smbclient -L localhost -U labex
Cuando se te solicite, ingresa la contraseña que configuraste para el usuario Samba (por ejemplo, password):
Enter WORKGROUP\labex's password:
Deberías ver una salida similar 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
Esto muestra que nuestro recurso compartido testshare recién creado está disponible.
Conexión al recurso compartido
Ahora, conectémonos al recurso compartido testshare:
smbclient //localhost/testshare -U labex
Ingresa la contraseña cuando se te solicite:
Enter WORKGROUP\labex's password:
Tras una conexión exitosa, verás el prompt de smbclient:
Try "help" to get a list of possible commands.
smb: \>
Navegación y listado de archivos
Ahora que estamos conectados al recurso compartido, exploremos algunos comandos básicos:
Para listar los archivos en el directorio actual:
smb: \> ls
Deberías ver el archivo de prueba que creamos 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
Creación de un directorio remoto
Creemos un nuevo directorio en el recurso compartido SMB:
smb: \> mkdir test-directory
Enumera el contenido nuevamente para verificar que el directorio se creó:
smb: \> ls
Deberías ver el nuevo directorio:
. 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
Cambio de directorios
Cambiemos al directorio que acabamos de crear:
smb: \> cd test-directory
Verifica que estamos en el nuevo directorio:
smb: \test-directory\> ls
La salida debería mostrar un directorio vacío:
. 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 volver al directorio principal:
smb: \test-directory\> cd ..
Obtención de ayuda dentro de smbclient
Para ver los comandos disponibles dentro de smbclient:
smb: \> help
Verás una lista de todos los comandos 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 .. !
Cuando hayas terminado de explorar, puedes salir de la sesión de smbclient:
smb: \> quit
En el siguiente paso, aprenderemos a transferir archivos entre el sistema Linux y los recursos compartidos SMB.
Transferencia de archivos con smbclient
En este paso final, aprenderemos a transferir archivos entre nuestro sistema Linux y el recurso compartido SMB.
Reconexión al recurso compartido
Conectémonos de nuevo a nuestro recurso compartido SMB:
smbclient //localhost/testshare -U labex
Ingresa la contraseña cuando se te solicite:
Enter WORKGROUP\labex's password:
Deberías ver el prompt de smbclient:
Try "help" to get a list of possible commands.
smb: \>
Carga de archivos al recurso compartido
Subamos el archivo de prueba que creamos anteriormente al recurso compartido SMB. Primero, necesitamos verificar nuestro directorio local actual:
smb: \> !pwd
Esto ejecuta el comando pwd en tu sistema local y debería mostrar:
/home/labex/project
Necesitamos cambiar al directorio donde se encuentra nuestro archivo de prueba:
smb: \> lcd ~/project/smb-files
Verifica que estamos en el directorio correcto:
smb: \> !ls
Deberías ver:
test.txt
Ahora, subamos el archivo al recurso compartido SMB:
smb: \> put test.txt
Deberías ver un mensaje que indica que el archivo fue transferido:
putting file test.txt as \test.txt (38.5 kb/s) (average 38.5 kb/s)
Verifica que el archivo se subió:
smb: \> ls
Deberías 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
Descarga de archivos desde el recurso compartido
Ahora, descarguemos un archivo del recurso compartido SMB a nuestro sistema local. Primero, creemos un nuevo directorio para almacenar los archivos descargados:
smb: \> !mkdir -p ~/project/smb-downloads
Cambia a ese directorio:
smb: \> lcd ~/project/smb-downloads
Ahora, descarga el archivo:
smb: \> get shared-test.txt
Deberías ver un mensaje que indica que el archivo fue transferido:
getting file \shared-test.txt of size 37 as shared-test.txt (37.0 KiloBytes/sec) (average 37.0 KiloBytes/sec)
Verifica que el archivo se descargó:
smb: \> !ls
Deberías ver:
shared-test.txt
Uso de mget y mput para múltiples archivos
Los comandos mget y mput te permiten transferir múltiples archivos a la vez. Intentemos crear algunos archivos más en nuestro sistema local:
smb: \> !cd ~/project/smb-files && touch file1.txt file2.txt file3.txt
Ahora, subamos todos los archivos .txt a la vez:
smb: \> lcd ~/project/smb-files
smb: \> mput *.txt
Para cada archivo, se te pedirá confirmación. Escribe Y para confirmar cada transferencia:
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 deseas transferir todos los archivos sin confirmación, puedes desactivar la solicitud:
smb: \> prompt
smb: \> mput *.txt
De manera similar, para descargar múltiples archivos:
smb: \> lcd ~/project/smb-downloads
smb: \> mget *.txt
Cuando hayas terminado, sal de la sesión de smbclient:
smb: \> quit
Comandos no interactivos
También puedes usar smbclient para ejecutar comandos sin entrar en el shell interactivo. Por ejemplo, para listar el contenido de un recurso compartido:
smbclient //localhost/testshare -U labex -c 'ls'
Ingresa la contraseña cuando se te solicite, y verás el listado del directorio:
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 descargar un archivo en un solo comando:
smbclient //localhost/testshare -U labex -c 'get test.txt /home/labex/project/test-download.txt'
Este comando descarga el archivo test.txt del recurso compartido y lo guarda como test-download.txt en tu directorio de proyecto.
Ahora tienes una buena comprensión de cómo usar smbclient para conectarte a recursos compartidos SMB, navegar por directorios y transferir archivos. Estas habilidades son esenciales cuando se trabaja en entornos mixtos Windows/Linux.
Resumen
En este laboratorio, exploramos el comando smbclient en Linux, que proporciona una herramienta esencial para conectar sistemas Linux a recursos compartidos de archivos de Windows (SMB/CIFS). Cubrimos varios aspectos clave del trabajo con smbclient:
Instalación: Instalamos el paquete
smbclienten Ubuntu 22.04, que incluía sus dependencias.Conceptos básicos del comando: Aprendimos sobre la sintaxis básica y los comandos disponibles en
smbclient, incluyendo cómo conectarse a recursos compartidos y navegar dentro de ellos.Configuración de un entorno de prueba: Creamos un entorno SMB de prueba utilizando un servidor Samba local para practicar nuestros comandos sin requerir acceso a un servidor Windows externo.
Conexión a recursos compartidos: Nos conectamos a nuestro recurso compartido SMB de prueba y exploramos comandos de navegación como
ls,cdymkdir.Transferencia de archivos: Aprendimos a subir archivos a un recurso compartido SMB usando
puty a descargar archivos usandoget. También exploramos las transferencias de múltiples archivos conmputymget.
Las habilidades que has adquirido en este laboratorio son directamente aplicables a escenarios del mundo real donde necesitas interactuar con sistemas o servidores Windows desde entornos Linux. Ya sea que estés transfiriendo archivos entre sistemas, automatizando copias de seguridad o integrando sistemas Linux en redes Windows, smbclient proporciona una potente interfaz de línea de comandos para estas tareas.
Para operaciones de archivos más complejas o frecuentes, es posible que desees explorar el montaje de recursos compartidos SMB directamente en tu sistema de archivos Linux usando el comando mount con el tipo de sistema de archivos cifs, que se basa en los conceptos que hemos aprendido aquí.



