Cómo usar el comando SCP para transferir archivos

Una de las herramientas más usadas por los desarrolladores full-stack para autenticar y cifrar archivos sin utilizar alojamientos de terceros, sistemas como los de Github, es el comando SCP (Secure Copy Protocol) de Linux. Este es un protocolo de transferencia que mueve archivos de manera segura y rápida entre dos ubicaciones remotas o una local y otra remota. Como sabrás, la transferencia de archivos puede ser problemática a veces, pero este protocolo elude los rastreadores de paquetes a los que muy comúnmente los archivos estarían expuestos. Además, protegen la confidencialidad y la seguridad (muy importante al usar VPS).

Basado en el protocolo Berkley Software Distribution y mezclando los sistemas RCP y SSH (Secure Shell), el SCP copia los archivos, cifra la información y la autentica en sistemas remotos. A diferencia de otros sistemas, lo único que necesitás para usar el SCP es un nombre de usuario y una contraseña para los sistemas: esto beneficia al que lo utilice por el ahorro de tiempo y de trabajo, ya que no se debe ingresar a ninguno de los sistemas en sí.

Acá te dejamos las guías necesarias para usar los comandos SCP.

La sintaxis del comando SCP

Un ejemplo de sintaxis del comando SCP podría ser:

scp [other options] [source username@IP]:/[directory and file name] [destination username@IP]:/[destination directory]

En el ejemplo anterior, podemos ver que se está realizando una transferencia entre dos servidores VPS. No hay que perder la calma, te ayudaremos para simplificarlo, verlo por partes y comprenderlo:

  • [other options] se trata de modificadores que se pueden acoplar al comando. Más adelante veremos más ejemplos.

  • [source username@IP] se trata del primer usuario e IP, del sistema de salida de los archivos. En un caso práctico, vas a encontrar algo como “root@123.123.123.12”. :/ se trata de un signo que indica el comienzo de lo que será un texto en el directorio de origen.

  • [directory and file name] se trata del nombre y la ubicación del directorio donde se encuentra alojado el archivo. Vas a encontrar algo así: “/usuarios/Gustavo/Escritorio/SCP.png”.

  • [destination username@IP] se trata del nombre del usuario del sistema de destino, y su IP.

  • [destination directory] se trata de la ubicación de destino donde se almacenará el archivo en el segundo sistema.

Un ejemplo completo podría ser:

scp -p root@162.168.1.1:/media/scp.png edward@162.168.1.2:/desktop/destination

¿Lo ves? Es menos complejo de lo que parecía al principio. Tené en cuenta que si estás transfiriendo archivos desde o hacia un sistema local, no hace falta la dirección de IP: la ubicación de destino o de origen bastarán, por ejemplo “/escritorio/nombre_de_carpeta”.

Para modificar el comando SCP, hay otras opciones. Podés escribirlas de dos maneras. Primero, con el nombre de la función (-option); pero, además, podés hacerlo con la primera letra de referencia (-o). Algunas de las más populares son:

  • –P (port) sirve para cambiar el puerto de entrada del servidor.

  • –c (cipher) sirve para determinar el algoritmo de cifrado a utilizar. Algunos de los valores que puedes usar son ‘aes256-ctr’, ‘aes256-cbc’, ‘blowfish-cbc’, ‘arcfour’, ‘arcfour128’, ‘arcfour256’, ‘cast128-cbc’, aes128-ctr’, ‘aes128-cbc’, ‘aes192-ctr’, ‘aes192-cbc’, y 3des-cbc’.

  • –q (quiet) sirve para ordenar que el proceso se haga en modo silencioso. Solo aparecerán los errores críticos.

  • –r (copia recursiva) sirve para realizar copias recursivas.

  • –4 o -6 (IPv4 o IPv6) sirve para elegir la versión de protocolo utilizada. Además, también es posible hacer una configuración más detallada utilizando la palabra clave de la familia de direcciones (address-family keyword).

  • –p sirve para mantener ciertos atributos de los archivos como por ejemplo los tiempos iniciales de modificación.

  • –u sirve para ordenar la eliminación del archivo de origen una vez realizado el traspaso.

  • –c se utiliza para comprimir los datos mientras se transfieren de un sistema a otro.

Otros criterios y elementos importantes.

Una de las características del SSH (cifrado que utiliza el comando SCP) es que requiere de la contraseña ssh, el permiso de lectura y los privilegios de escritura del equipo al que copiarás los archivos. Es importante tenerlo a mano. Además, vas a necesitar llaves SSH para la autenticación y la configuración de la conexión. El siguiente comando puede serte de ayuda:

ssh-keygen -t rsa

Para utilizarlo, debes copiar esta llave del sistema remoto y utilizar:

ssh-copy-id user@remote_machine

Al realizar la autenticación de las máquinas remotas, estarás listo para comenzar la transferencia.

La ruta de identidad predeterminada de la llave del sistema local, es distinta para cada versión:

  • Para la versión 1 del protocolo SCP es ~/.ssh/id_rsa.

  • Para la versión 2 del protocolo SCP es ~/.ssh/id_dsa.

El siguiente paso para continuar el trabajo es localizar el lugar de almacenamiento de la copia de seguridad de las llaves privadas y públicas para poder utilizar el comando ssh.

En el caso de utilizar la ruta /back-up/home/jack/.ssh, el siguiente comando te será de ayuda:

ssh -i /back-up/home/user/.ssh/id_dsa user@yourserver.servername.domain

Tené en cuenta que excepto que especifiques con la opción overwrite no o –overwrite ask en el comando SCP, los archivos con mismo nombre y ubicación se sobreescribirá por default. Además, otro consejo es, en caso de transferir archivos de gran tamaño, utilizar una sesión tmux o, en caso distinto, ejecutar el comando desde otra pantalla; lo que es más, también vas a tener que usar el código -v para hacer transferencias de gran tamaño.

Copiar archivos utilizando el comando SCP

La cualidad más destacable del comando SCP de Linux es la función de transferir archivos entre dos host o un host y una máquina. Sin embargo, para cada transferencia, el comando tiene distintos usos. Debajo vas a ver cada uno.

Un archivo local a un destino remoto.

Para realizar esta operación, seguí los siguientes pasos: Copiar el archivo scp.zip al usuario del sistema remoto denominado root. El nombre de usuario debe estar seguido de la dirección de IP del servidor y verás el siguiente ejemplo:

scp /users/Edward/desktop/scp.zip root@191.162.0.2:/writing/article

Luego deberás ingresar la contraseña del usuario de la root, a no ser que tengas configurada alguna confirmación automática. VEn la pantalla aparecerá algo así:

root@191.162.0.2’s password: novel3.zip 100% 0 0.0KB/s 00:00

La máquina remota por default estará configurada para el puerto 22, pero supongamos que tus conexiones SSH no están ahí. Si ese es el caso, deberás utilizar:

scp -P 2322 /users/Edward/desktop/scp.zip root@191.162.0.2:/writing/article

Nota: en el caso de querer cambiar el nombre del archivo en el proceso, deberás utilizar un comando que se vea así:

scp /users/Edward/desktop/scp.zip root@191.162.0.2:/writing/article/howtoscp.zip

Un archivo remoto a una máquina local.

En este caso, el recorrido se invierte y la sintaxis también. Ahora lo que buscamos es copiar el scp.zip desde el host remoto hacia nuestra máquina local:

scp root@191.162.0.2:/writing/articles/SCP.zip Users/Edward/Desktop

Al igual que el caso anterior, el sistema requerirá la contraseña del SSH.

Un archivo remoto a una localización remota.

Lo primero para realizar este trabajo es ingresar las contraseñas SSH de ambas cuentas remotas, luego de comenzar el comando desde tu localización.

Mirá este ejemplo:

scp root@191.162.0.2:/writing/article/scp.zip edward@11.10.0.1:/publishing

En este caso, se utiliza un archivo /writing/article/scp.zip, pero en caso de querer copiar carpetas, lo único que tenés que hacer es agregar la opción -r y agregar la ruta específica hacia la carpeta.

En fin: este es un sistema bastante fácil al descubrirlo. También es confiable y seguro para tus archivos, y la confidencialidad es total y certera. Además, es muy útil cuando trabajás con muchos servidores, evitando que tengas que iniciar la sesión.

Última actualización