Cómo usar el comando scp en Linux

Publicado: 2022-06-28
Terminal Linux en la pantalla de un portátil.
fatmawati achmad zaenuri/Shutterstock.com

El comando scp hace que copiar archivos entre computadoras Linux sea fácil y seguro. Utiliza seguridad SSH, pero lo mejor de todo es que es simple. Si puede usar cp , puede usar scp .

El protocolo de copia segura y scp

Definamos un par de términos: hay SCP y hay scp . El SCP en mayúsculas significa Protocolo de copia segura. La minúscula scp significa cp seguro. En otras palabras, SCP es un protocolo y scp es un programa.

scp fue diseñado para ser un medio seguro para copiar archivos entre computadoras Linux remotas. Utiliza SSH para establecer conexiones seguras. SSH, o shell seguro, es un protocolo de red criptográfico que a menudo se usa para acceder e iniciar sesión en computadoras Linux remotas. En las distribuciones de Linux, OpenSSH proporciona la funcionalidad SSH.

Cómo configurar el escritorio remoto en Ubuntu
RELACIONADO Cómo configurar un escritorio remoto en Ubuntu

SCP es algo antiguo, y se han expresado preocupaciones sobre su uso en la actualidad. Desde la versión 8.8 de OpenSSH, SCP se considera obsoleto. Las implementaciones modernas de scp utilizan de forma predeterminada el Protocolo seguro de transferencia de archivos. SSH todavía se usa para la conexión segura, pero las transferencias de archivos son manejadas por SFTP. Todo esto es invisible y ocurre mágicamente bajo el capó, y la sintaxis de scp sigue siendo la misma.

Se prefiere el programa rsync sobre scp , pero es posible que se encuentre con una computadora que no tenga rsync instalado y para la cual no tenga privilegios de root, lo que significa que no puede continuar e instalarlo. Para copiar archivos de una computadora a otra en una red autónoma, scp está perfectamente bien. Para que scp funcione, debe tener SSH ejecutándose en todas las computadoras desde y hacia las que copiará.

Para ver la versión de OpenSSH instalada en su computadora, escriba:

 ssh -V 

Obtención de la versión de OpenSSH

Copiar un solo archivo

Al igual que el comando cp estándar, scp copia archivos desde la ubicación de origen a la ubicación de destino . Para copiar un archivo a una computadora remota, debe conocer la dirección IP o el nombre de red de la computadora remota. También debe tener las credenciales de una cuenta de usuario que tenga privilegios de escritura para la ubicación a la que está enviando el archivo.

Para enviar un archivo llamado “sample.txt” a una computadora llamada “fedora-34” en la red local, la sintaxis es:

 scp ./muestra.txt [email protected]:/home/dave/Descargas/ 

Copiar un solo archivo a una computadora remota

El comando está compuesto por:

  • scp : El comando scp
  • ./sample.txt : El archivo que vamos a enviar. Esto está en el directorio actual.
  • dave@ : La cuenta de usuario en la computadora remota a la que vamos a enviar el archivo.
  • fedora-34.local : el nombre de red de la computadora remota.
  • :/home/dave/Downloads/ : La ubicación para copiar el archivo en la computadora remota. Tenga en cuenta los dos puntos ":" que separan el nombre de la computadora y la ruta.

Se le pedirá que ingrese la contraseña de la cuenta en la computadora remota y luego se copiará el archivo.

Si desea que el archivo tenga un nombre diferente en la computadora remota, puede agregar un nombre de archivo a la ruta de destino. Para copiar el mismo archivo y llamarlo "diferente-archivo.txt", use esta sintaxis:

 scp ./muestra.txt [email protected]:/home/dave/Downloads/diferente-archivo.txt 

Copiar un solo archivo a una computadora remota con un nuevo nombre

El comando scp sobrescribirá silenciosamente los archivos existentes, así que tenga cuidado cuando copie archivos. Si ya existe un archivo en la computadora de destino con el mismo nombre que el archivo que está copiando, se sobrescribirá y se perderá.

Si la computadora de destino no usa el puerto SSH predeterminado de 22, puede usar la opción -P (número de puerto) para proporcionar el número de puerto adecuado.

Recuperación de un solo archivo

Para copiar un archivo desde un servidor remoto, simplemente coloque el servidor remoto como origen y coloque la ruta local donde desea copiar el archivo como destino. Vamos a copiar un archivo llamado "plan de desarrollo.md" desde la computadora remota al directorio actual en la computadora local.

 scp [email protected]:/home/dave/Descargas/plan-de-desarrollo.md . 

Copiar un solo archivo desde un servidor remoto al directorio actual de la computadora local

Si agrega un nombre de archivo a la ruta local, el archivo se copia y recibe ese nombre.

 scp [email protected]:/home/dave/Descargas/plan-de-desarrollo.md ./dp-1.md 

Copiar un solo archivo desde un servidor remoto al directorio actual de la computadora local con un nuevo nombre

El archivo se copia pero se renombra a nuestro nombre de archivo especificado.

 ls-hl *.md 

Copiar varios archivos

Copiar varios archivos en cualquier dirección es fácil. Puede enumerar tantos archivos de origen como desee. Aquí, estamos copiando dos archivos de rebajas y un archivo CSV.

 scp ./dp-1.md ./dp-2.md ./dp-3.csv [email protected]:/home/dave/Descargas/ 

Copiar múltiples archivos con nombre a una computadora remota

Los tres archivos se copian en la computadora remota. También puede utilizar comodines. Este comando hace exactamente lo mismo que el último comando.

 scp./dp . [email protected]:/home/dave/Descargas/ 

Copiar varios archivos a una computadora remota usando comodines en el nombre del archivo

Copia recursiva de directorios

La opción -r (recursiva) le permite copiar árboles de directorios completos con un solo comando. Colocamos dos archivos en un directorio llamado "datos" y creamos un directorio llamado "CSV" dentro del directorio "datos". Colocamos un archivo CSV en el directorio "data/CSV".

Este comando copia los archivos y recrea la estructura de directorios en la computadora remota.

 scp -r ./datos [email protected]:/home/dave/Descargas/ 

Copiar un árbol de directorios a una computadora remota

Copia de archivos entre servidores remotos

Incluso puede indicarle a scp que copie archivos de un servidor remoto a otro. La sintaxis es bastante simple. Usted proporciona el nombre de cuenta y la dirección de red del servidor de origen y el nombre de cuenta y la dirección de red del servidor de destino. Los archivos se copian desde el servidor de origen y se copian en la ubicación del servidor de destino.

Aunque la sintaxis es simple, asegurarse de que todo lo demás esté en su lugar requiere un poco más de reflexión. Obviamente, la ubicación en la que intenta copiar los archivos en el servidor remoto debe ser accesible para la cuenta de usuario que especifique en la línea de comando. Y esa cuenta de usuario debe tener permisos de escritura en esa ubicación.

Un requisito previo más sutil es que el acceso SSH debe configurarse entre su computadora local y la computadora de origen, y también entre los servidores de origen y de destino. Asegúrese de poder utilizar SSH para iniciar sesión en el servidor de destino desde el servidor de origen . Si no puede hacer eso, scp no podrá conectarse.

Cómo crear e instalar claves SSH desde el shell de Linux
RELACIONADO Cómo crear e instalar claves SSH desde el shell de Linux

La configuración de claves SSH para que pueda usar el acceso autenticado pero sin contraseña es, con mucho, el método preferido. El uso de contraseñas se vuelve complicado muy rápidamente y, debido a que se le solicita la contraseña para cada cuenta de usuario, le impide automatizar completamente el proceso con un script.

Configuramos claves SSH para las cuentas de usuario que usamos en cada servidor remoto. Esto proporcionó acceso SSH sin problemas al otro servidor, para esos dos usuarios. Esto nos permite transferir archivos en cualquier dirección, utilizando esas dos cuentas de usuario.

Para copiar archivos de la cuenta de usuario "davem" en una computadora Manjaro a la cuenta "dave" en una computadora Fedora, a través de un comando scp emitido desde nuestra computadora Ubuntu local, la sintaxis es:

 scp [email protected]:/home/davem/man . [email protected]:/inicio/dave/ 

Copiar archivos de un servidor remoto a otro.

Regresamos silenciosamente a la línea de comandos. No hay indicios de que haya pasado algo. Partiendo de la premisa de que la falta de noticias es una buena noticia, scp solo informa sobre errores para esta copia remota a remota. Al revisar la computadora Fedora podemos ver que los archivos de la computadora Manjaro han sido copiados y recibidos.

Archivos de la computadora Manjaro recibidos en la computadora Fedora

De manera predeterminada, los archivos se copian directamente desde la computadora de origen a la computadora de destino. Puede anular esto usando la opción -3 (tres vías).

Con esta opción, los archivos se transfieren desde el destino a la fuente, a través de su computadora local. Para que eso suceda, debe haber un acceso SSH sin problemas desde su computadora local a la computadora de destino.

 scp -3 [email protected]:/home/davem/man . [email protected]:/inicio/dave/ 

Copiar archivos de un servidor remoto a otro, a través de la computadora local

Todavía no hay indicios de que haya sucedido algo, incluso cuando se canalizan los archivos a través de su computadora local. La prueba del pudín, por supuesto, es verificar la computadora de destino.

Otras opciones

El -p (preservar los atributos del archivo) mantendrá la creación del archivo original, la propiedad y las marcas de acceso en los archivos transferidos. Tendrán los mismos metadatos que los archivos originales en la computadora de origen.

Si ve mensajes de error, intente repetir el comando y use el indicador -v (detallado) para ver información detallada sobre el intento de transferencia. Debería poder detectar el punto de falla en la salida.

La opción -C (comprimir) comprime los archivos a medida que se copian y los descomprime cuando se reciben. Esto es algo que se remonta a la era de las comunicaciones lentas por módem entre computadoras. Reducir el tamaño de la carga útil podría reducir los tiempos de transmisión.

Hoy en día, es probable que el tiempo necesario para comprimir y descomprimir los archivos sea mayor que la diferencia entre las transmisiones comprimidas y sin comprimir. Pero debido a que scp se usa mejor para copiar archivos entre computadoras en la misma LAN, la velocidad de transmisión no debería ser una gran preocupación.

RELACIONADO: Cómo hacer una copia de seguridad de su sistema Linux con rsync