Si tenemos instalada Samba en un máquina o en un dispositivo multimedia como el Mede8er, por ejemplo y queremos compartir o intercambiar archivos mediante la línea de comandos deberemos instalar en la máquina cliente el paquete smbclient
.
Samba nos permite conectarnos al ordenador o dispositivo de una manera gráfica, ya sea desde Windows, MacOS o cualquier sistema gráfico en Linux, pero ¿y si tenemos un servidor sin entorno gráfico que tiene almacenado los datos a enviar al dispositivo? Aquí es donde entra la potencia de la terminal instlando el paquete que nos corresponde.
Lo primero, instalar smbclient
.
sudo apt install smbclient
Comprobamos que está instalado y lo verificamos.
smbclient --version
Para continuar tenemos que conocder la IP de la máquina a la que nos vamos a conectar. Si es un dispositivo multimedia lo más probable es que no haya que autenticarse, por lo que escribiremos los siguiente:
smbclient //192.232.5.166/recurso -N
donde ‘recurso’ es el nombre del recurso compartido en el dispositivo SMB. Si no sabemos su nombre, podremos listar todos los recursos disponibles en el dispositivo con el siguiente comando:
smbclient -L 192.232.5.166 -N
Pero si el sistema o dispositivo tuviese usuario y contraseña lo usaríamos de la siguiente manera:
smbclient //192.232.5.166/compartir -U usuario%contraseña
Y en caso de que no quisiéramos enviar la contraseña y obligar a que nos la pida, lo usaríamos tal que así:
smbclient //192.232.5.166/compartir -U usuario
Bien, ya estamos conectados, por lo que nuestro prompt pasará a ser el siguiente:
smb: \>
Comandos dentro la terminal de Samba en la sesión de smbclient
Los comandos más comunes son los siguientes:
ls
: Lista los archivos y directorios en el recurso compartido.cd [directorio]
: Cambia al directorio especificado.get [archivo]
: Descarga un archivo del recurso compartido a tu máquina local.put [archivo]
: Sube un archivo de tu máquina local al recurso compartido.exit
: Sale de la sesión de smbclient.
El directorio por defecto de la máquina desde la que nos conectamos es en el que nos encontramos cuando accedemos a
smbclient
.
Copiar un archivo con smbclient
Un ejemplo práctico es el siguiente para copiar (subir) un archivo: Nos conectamos
smbclient //192.232.5.166/compartir -N
Accedemos a la carpeta aunque no es necesario si la especificamos en la ruta como se puede ver en el siguiente comando.
smb: \> cd "nombre carpeta"
Copiamos el archivo indicando la carpeta o sin indicarla si ya hemos accedido a ella previamente.
smb: \> put archivo.txt "nombre carpeta/archivo.txt"
Copiar múltiples archivos con smbclient
Si queremos copiar muchos archivos a la vez, no nos servirá put
ya que este comando sirve para un solo archivo.
Para copiar muchos usamos el comando mput
.
smb: \nombre carpeta\> mput *
Aunque aquí nos podemos encontrar con un pequeño o gran impedimento que es que nos pedirá confirmación por cada uno de los archivos a subir, obligándonos a estar delante del teclado y atento a cada archivo.
También podemos hacer todo esto desde la línea de comandos sin interactuar con smbclient, es decir sin entrar en ‘Samba’, y para ello podemos usar smbclient con el comando -c
y, a la vez, ejecutar comandos específicos. Por ejemplo:
smbclient //192.232.5.166/compartir -N -c 'cd "nombre carpeta"; mput *'
Pero claro, con esta opción también nos irá preguntado la confirmación de copia archivo a archivo.
Veamos una de las posibles soluciones sin involucrar más comandos en la misma ecuación.
Creamos un script en bash que contenga un bucle de tantos ciclos como archivos tengamos y usamos el comando put
.
#!/bin/bash/
for file in *; do
smbclient //192.232.5.166/compartir -N -c "cd \"nombre carpeta\"; put \"$file\""
done
lo guardamos con el nombre que queramos, por ejemplo script_copia.sh
y le damos permiso de ejecución:
chmod +x script_copia.sh
Y lo ejecutamos:
./script_copia.sh
Nos copiará todos los archivos que haya en el directorio al servidor o dispositivo Samba.
Error NT_STATUS_CONNECTION_DISCONNECTED
Si al intentar conectar te da este error: NT_STATUS_CONNECTION_DISCONNECTED
puedes solucionarlo abriendo el archivo /etc/samba/smb.conf y agregando las siguientes líneas en la sección [global]
:
client min protocol = NT1
client max protocol = SMB3
Después de este cambio, o mejor dicho añadido, tienes que reiniciar el servicio Samba.
systemctl restart smbd