Cómo enviar un archivo por FTP desde la consola en Linux

En Tutoriales y Guías por

Hoy vamos a hablar de una de esas pequeñas tareas que nos acercan un poco más a la terminal Linux y que nos demuestra una vez más la gran funcionalidad de esta. Vamos mostraros un tutorial completo de cómo subir o enviar un archivo por FTP desde la consola de comandos en Linux.

Cómo enviar un archivo por FTP desde la consola en Linux

Sabemos que lidiar con la consola no es una de las tareas preferidas de los usuarios que se acercan por primera vez al universo Linux, pero este tutorial es apto para todo tipo de usuarios, tanto nóveles como avanzados. Para nuestras pruebas hemos empleado una distribución Ubuntu Server a la que accedemos a través de SSH con PuTTY, aunque lo aquí dicho es aplicable a otras distribuciones Linux.

Si eres un usuario avanzado entendemos que no necesitas leer toda la explicación y que sólo necesitas el siguiente comando:

ftp -n <<EOF
open ftp.ejemplo.com
user usuario contraseña
put archivo.tar.gz
EOF

Cómo enviar un archivo por FTP desde la consola en Linux.

En esta primera parte del tutorial vamos a mostrar cómo enviar un archivo por FTP desde la consola sin instalar ninguna aplicación o herramienta adicional. Para esto, usaremos el comando ftp que tenemos disponible por defecto.

El comando ftp permite a los usuarios interactuar con servidores FTP y gestionar los archivos del servidor remoto. En este tutorial no recogeremos todos los comandos disponibles, sólo hablaremos de los necesarios para subir un archivo al servidor FTP.

Vamos a ir paso a paso describiendo todo el proceso, con las aclaraciones necesarias para así aprender algo y no limitarnos a copiar y pegar un comando la terminal.

En primer lugar vamos a establecer la conexión con el servidor FTP, para esto empleamos el comando:
ftp -np ftp.ejemplo.com

En este comando vemos que empleamos las opciones -np que quieren decir:

  • -n: evita la autentificación de forma automática durante el establecimiento de la conexión. De esta forma será necesario introducir manualmente el nombre de usuario y la contraseña.
  • -p: usa el modo pasivo para las transferencias de archivos. Esto es útil cuando el servidor FTP está detrás de un firewall, pero también es necesario que el servidor remoto tenga soporte para el modo pasivo.

Lo único que nos queda por analizar de este primer comando es ejemploftp.com que es el host del servidor FTP. En algunos casos puede ser una IP y en otros un nombre de dominio.

Tras ejecutar este comando, si todo ha ido bien, entraremos en modo interactivo con el servidor FTP y ya podemos enviar los comandos necesarios para subir el archivo.

En primer lugar tendremos que autentificarnos con un usuario y contraseña, ya que nuestro servidor FTP así lo requiere. Para autentificarnos usaremos el comando:
ftp> user usuario contraseña

En este comando vemos que hay tres partes:

  • user: es el comando FTP que solicita la autentificación de un usuario.
  • usuario: el nombre de usuario con el que nos autentificamos en el servidor remoto.
  • contraseña: la contraseña correspondiente al nombre de usuario.

Si quisiésemos entrar con el usuario Anonymous sin contraseña, podemos omitir la contraseña, de forma que el comando sería:
ftp> user usuario

Llegados este punto usaremos el comando FTP put para enviar el archivo:
ftp> put /tmp/backup.tar.gz /backups/backup_copy.tar.gz

En este comando se diferencian tres partes:

  • put: es el comando FTP que envía un archivo al servidor remoto.
  • /tmp/backup.tar.gz: es el archivo local que queremos transferir por FTP.
  • /backups/backup_copy.tar.gz: es el archivo remoto. En nuestro ejemplo hemos especificado que se guarde dentro de la carpeta backups, pero para que todo vaya bien, esa carpeta tiene que existir y tener permisos de escritura para nuestro usuario. Si no especificamos un nombre de archivo remoto, se empleará el nombre del archivo local.

Para finalizar, nos desconectamos del servidor FTP con el comando:
ftp> quit

A modo de ejemplo dejo todo el texto de una sesión interactiva con el comando ftp desde la terminal:

zeokat@ubuntu:~$ ftp -np 192.168.247.128
Connected to 192.168.247.128.
220 (vsFTPd 3.0.3)

ftp> user zeokat contraseña
331 Please specify the password.
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.

ftp> put /tmp/backup.tar.gz /backups/backup_copy.tar.gz
local: /tmp/backup.tar.gz remote: /backups/backup_copy.tar.gz
227 Entering Passive Mode (192,168,247,128,169,254).
150 Ok to send data.
226 Transfer complete.
3363 bytes sent in 0.00 secs (89.0891 MB/s)

ftp> quit
221 Goodbye.

Creo que no se me ha olvidado nada en el tutorial y que los aspectos básicos están presentes. De todas formas, siempre es bueno tener el comando de ayuda man ftp a mano, por si necesitásemos consultar alguna cosa. Por ejemplo en el caso de querer subir varios archivos, podemos ver en la documentación el funcionamiento del comando FTP mput.

Muchos os estaréis preguntando que el código facilitado para usuarios avanzados al inicio de este tutorial es diferente al que hemos visto paso a paso. A primera vista puede parecer diferente, pero si lo ejecutamos conseguiremos exactamente lo mismo, la única diferencia es que el primer código está escrito de forma no interactiva, por lo que podemos usarlo en un script en bash.

Otros métodos para subir archivos por FTP desde la terminal Linux.

Toda la explicación anterior se hacía sin instalar ningún programa adicional, pero en este apartado vamos a recurrir a diferentes programas para subir un archivo por FTP desde la terminal Linux.

Usando cURL:

Para instalar cURL ejecutamos el comando:
sudo apt-get install curl

Para subir un archivo por FTP con cURL ejecutamos desde la terminal:
curl -T backup.tar.gz ftp://192.168.247.128 --user usuario:contraseña

Usando LFTP:

Para instalar LFTP ejecutamos el comando:
sudo apt-get install lftp

Para enviar un archivo por FTP con LFTP ejecutamos el comando:
lftp -e "put -O directorio/remoto/ /archivo/local.txt -o nombre_remoto.txt; bye" -u usuario,contraseña ftp.ejemplo.com

En las opciones -O y -o es importante fijarse en si es mayúscula o minúscula y el orden en el que están. A modo de ejemplo, suelo ejecutar el siguiente comando para enviar una copia de seguridad a un servidor remoto:
lftp -e "put -O /backups /tmp/backup.tar.gz -o backup_copy.tar.gz; bye" -u zeokat,contraseña 192.168.247.128

Personalmente me gusta usar cURL porque es una librería que soporta más protocolos además de FTP y tiene muchos años de desarrollo a sus espaldas. Con esto no quiero decir que el resto de alternativas sean malas, tan solo es una preferencia personal. Hay más programas con los que enviar un archivo por FTP desde la consola en Linux, por ejemplo uno muy bueno es NCFTP, pero creo que con los mostrados hay más que suficiente.