Scp y sftp: transferir archivos de manera segura

OpenSSH también provee dos utilidades para transferir (enviar y recibir) archivos de manera segura a través de la red: scp y sftp (secure copy y secure file transfer protocol, respectivamente). Ambas herramientas funcionan no solamente dentro de una LAN, sino también sobre Internet. En este post explicaremos la diferencia entre ambas y cómo utilizarlas para enviar y recibir archivos.

Enviar y recibir archivos de manera segura con scp y sftp

Mediante los siguientes cuatro ejemplos ilustraremos el uso de scp y sftp:

Ejemplo 1 – Transferir archivos con scp

Para enviar archivo1 desde nuestro equipo local a /directorio/donde/copiar en otro remoto (en el cual el servidor SSH está escuchando en el puerto 2990, tal como en un post anterior), utilizaremos la siguiente sintaxis:

scp -P 2990 -p archivo_local usuario_remoto@equipo_remoto:/directorio/donde/copiar

y el ejemplo concreto:

scp -P 2990 -p test1 192.168.0.29:~/backups

Donde:

  • La opción -P (mayúscula) nos permite especificar un puerto de escucha del servidor SSH remoto si es diferente a 22 (2990 en este caso). Si el puerto fuera 22, no es necesario incluir esta opción y el valor que la acompaña.
  • La opción -p permite preservar los permisos actuales de test1 (que puede ser tanto un archivo como un directorio local) luego de transferirlos al equipo remoto (192.168.0.29) en el directorio /home/gacanepa/backups.
  • usuario_remoto@equipo_remoto es el usuario del equipo remoto cuyas credenciales (o claves) utilizaremos para la transferencia. Podemos obviar la parte usuario_remoto@ si en el equipo local estamos logueados con el mismo nombre de usuario, tal como lo hicimos en este caso (la cuenta de usuario gacanepa existe tanto en el equipo local como en el servidor).

Ejemplo 2 – Descargar archivos mediante scp

Si deseamos descargar el archivo /home/gacanepa/backups/website/index.html desde 192.168.0.29 al directorio ~/copiaslocales en el equipo local, el comando a utilizar sería el siguiente:

scp -P 2990 192.168.0.29:~/backups/website/index.html ~/copiaslocales

En la Fig. 1 se muestra el resultado de los dos ejemplos anteriores.

Enviar y recibir archivos utilizando scp
Figura 1 – Enviar y recibir archivos utilizando scp

Ejemplo 3 – Enviar archivos mediante sftp

Sftp, a diferencia de scp, no requiere que conozcamos previamente la ubicación del archivo que deseamos recibir (descargar) o recibir. Más bien, nos permite «explorar» el equipo remoto (hasta donde los privilegios de nuestra cuenta de usuario nos lo permitan, por supuesto).

Tanto para enviar como para recibir, es preciso que primero establezcamos una conexión con el servidor remoto (192.168.0.29) de la siguiente manera (en este caso también podemos omitir la parte gacanepa@ si estamos utilizando la misma cuenta en el equipo local):

sftp -oPort=2990 gacanepa@192.168.0.29

En este punto podemos escribir help y presionar Enter para ver el menú de ayuda sobre los comandos que podemos ejecutar durante la sesión SFTP con el servidor, entre los que podemos mencionar las siguientes:

  • Mostrar el directorio de trabajo remoto (pwd)
  • Mostrar el directorio actual en el equipo local (lpwd)
  • Cambiar cualquiera de los dos directorios anteriores (cd y lcd, respectivamente, seguido del nuevo directorio en el que deseamos ubicarnos)
  • Recibir archivos (get)
  • Enviar archivos (put)

Ahora sí, ¡al ejemplo!

Para enviar el archivo test.sh desde el equipo local al remoto:

put test.sh

Ejemplo 4 – Recibir archivos con sftp

Para descargar el directorio remoto pruebas (incluyendo subdirectorios) y preservar permisos:

get -Pr pruebas

Podemos ver el resultado de los ejemplos 3 y 4 en la Fig. 2:

Enviar y recibir archivos con sftp
Figura 2 – Enviar y recibir archivos con sftp

Espero que este post les haya resultado de utilidad. ¡Hasta el próximo!