GNU/Linux >> Tutoriales Linux >  >> Linux

Copie archivos de forma segura con el comando SCP

El comando SCP (Secure Copy) es un comando no interactivo para copiar archivos y directorios de forma segura entre dos sistemas. SCP utiliza el protocolo SSH para el cifrado y la autenticación, lo que lo convierte en una forma segura de transferir archivos entre servidores remotos.

¿No eres un lector? ¡Mira este video tutorial relacionado! ¿No ve el video? Asegúrate de que tu bloqueador de anuncios esté deshabilitado.

Si está buscando una guía increíble para usar el comando SCP, no busque más. Este tutorial le mostrará ejemplos de uso de comandos SCP, que podrían ayudarlo a convertirse en un usuario seguro de SCP.

¿Listo? ¡Siga leyendo para llevar sus transferencias de archivos al siguiente nivel!

Requisitos

Este tutorial será una demostración práctica. Si desea seguir adelante, asegúrese de cumplir con los siguientes requisitos.

  • Necesitará dos computadoras Linux para que actúen como el origen de la copia y el destino de la copia en la misma red o en redes diferentes. Este tutorial usará computadoras con Ubuntu 20.04, como se indica en la siguiente tabla.
Nombre de la computadora Designación
ubuntu1 Host de origen
ubuntu2 Host de destino
  • Si hay un firewall en cada una de las computadoras o entre las dos, asegúrese de que el puerto 22 esté abierto.
  • Este tutorial asume que ya ha abierto una sesión SSH y ha iniciado sesión en ambas computadoras.

Copiar un archivo usando el comando SCP

Puede haber muchas razones por las que desearía copiar archivos de un sistema a otro. Tal vez para fines de copia de seguridad, replicar archivos de configuración o simplemente desear tener una copia de los archivos. Cualquiera que sea la razón, el comando SCP te respalda.

La sintaxis básica para el comando SCP es la siguiente.

scp [Option] [[email protected]]SRC_HOST:]your_file1 [[email protected]]DEST_HOST:]you_file2

donde:

  • Option – especifica cualquier opción a utilizar, como cifrado o límite. Utilizará algunas opciones comunes en este tutorial.
  • user1 – es el nombre de usuario en el host de origen.
  • SRC_HOST – es el nombre de host o la dirección IP de la copia origen .
  • your_file1 – es la ruta y el nombre del archivo que desea copiar.
  • DEST_HOST – es el nombre de host o la dirección IP del destino de la copia .
  • user2 – es el nombre de usuario con acceso al host de destino.
  • your_file2 – es la ruta y el nombre del archivo que desea copiar desde your_file1

Nota:puede especificar las rutas de sus archivos utilizando una ruta relativa o absoluta en el sistema local. Pero las rutas de archivo en el sistema remoto deben usar un nombre de usuario con una ruta absoluta.

Ahora que comprende la sintaxis básica, puede comenzar con el ejercicio de copia de archivos usando el comando SCP.

1. Para comenzar, cree un nuevo archivo llamado backup.txt en el directorio de inicio en ubuntu1 .

# Change into the home directory
cd ~
# Create a text file with content
echo "This is my backup file" > backup.txt
# Display the file content to confirm
cat backup.txt
# Show the SHA1 hash 

2. A continuación, cree un nuevo directorio llamado copia de seguridad en ubuntu2. Este directorio será la ruta de destino de la copia del archivo.

# Creat the backup directory
mkdir ~/backup && cd ~/backup
# Display the full path
pwd

3. Ahora, ejecute el siguiente comando scp en ubuntu1 para copiar backup.txt a la copia de seguridad directorio en ubuntu2. Asegúrate de reemplazar el nombre de usuario y la ruta con los tuyos.

scp backup.txt [email protected]:/home/ata/backup

Si desea copiar el archivo con un nombre diferente, agregue el nuevo nombre de archivo a la ruta de destino. Ejemplo:scp backup.txt [email protected]:/home/ata/backup/backup2.txt

4. Si ahora es la primera vez que se conecta a ubuntu2 anfitrión, escriba yes en el mensaje de confirmación y presione Entrar.

5. A continuación, escriba la contraseña de la cuenta de usuario en ubuntu2 y presione Entrar. Una vez que ingrese la contraseña correcta, se procederá con la copia del archivo.

6. Después de copiar el archivo, cambie a su ubuntu2 terminal y ejecute el siguiente comando para enumerar el contenido del directorio.

ls

Confirme que el archivo backup.txt existe y has copiado correctamente el archivo.

7. A continuación, muestre el contenido del archivo copiado para confirmar que el archivo está intacto en ubuntu2 .

cat backup.txt

8. Por último, para confirmar que los archivos son idénticos, obtenga la suma de verificación SHA1 de cada archivo en ambas máquinas y compare los valores. Este paso es una medida adicional para verificar que la integridad del archivo no cambió durante la transferencia.

# on ubuntu1 and ubuntu2
sha1sum backup.txt

Ejecución de copia recursiva con el comando SCP

En la sección anterior, aprendió a copiar archivos individuales de un sistema local a un sistema remoto usando el comando SCP. A menudo necesita copiar un directorio completo con sus subdirectorios y archivos en escenarios de la vida real.

La copia de directorios completos generalmente se aplica a escenarios de copia de seguridad. Supongamos que su servidor (ubuntu1) ejecuta un servidor web cuyos archivos están en /var/www/ directorio. A continuación se muestra la estructura de árbol de carpetas de muestra.

/var/www
├── html
│   └── index.html
└── your_domain
    └── index.html

Puede hacer una copia de seguridad de toda la carpeta sin esfuerzo en un destino remoto con el comando SCP.

En la mayoría de los casos, las operaciones de copia de seguridad se ejecutan a través de scripts de automatización y tareas programadas o trabajos cron. Este ejemplo demuestra cómo haría una copia de seguridad de un directorio completo de forma manual.

1. Primero, cree una copia de seguridad del servidor web directorio en ubuntu2 .

# Create the backup directory on ubuntu2
mkdir ~/web-server-backup
# Display the full backup directory path
realpath ~/web-server-backup

2. A continuación, vuelva a ubuntu1 terminal y ejecute el siguiente comando SCP. El modificador -r habilita el modo de copia recursiva, lo que significa que SCP copiará todo /var/www/ desde la carpeta superior hasta el último archivo.

scp -r /var/www/ [email protected]:/home/ata/web-server-backup

3. Ahora, ejecute el comando de árbol en ambos sistemas para comparar la estructura de directorios. En ubuntu1 , mostrará el árbol de directorios para /var/www . En ubuntu2, mostrará el árbol de directorios para el directorio de copia de seguridad, que es /home/ata/web-server-backup en este ejemplo.

# on ubuntu1
tree /var/www/

# on ubuntu2
tree /home/ata/web-server-backup

Filtrado de extensiones de archivo para copiar

Suponga que tiene un directorio en su sistema local que contiene tipos de archivos mixtos con diferentes extensiones. Se supone que debe copiar todos los archivos de esa carpeta a una computadora remota usando el comando SCP como parte de su trabajo. Ya sabe cómo copiar directorios completos.

Pero, la condición es que solo debe copiar todos los archivos con el *.txt extensión. No entrar en pánico; todavía vas por buen camino, y la solución no dista mucho de lo que ya hiciste en las secciones anteriores. Para filtrar los archivos a copiar, usará comodines.

Los caracteres comodín comunes son el asterisco (*), que representa cero, uno o más caracteres, y el signo de interrogación (?), que significa un solo carácter.

1. Primero, cree la carpeta y los archivos de muestra en ubuntu1 que copiará más adelante. Ejecute el siguiente comando para crear la carpeta foo y archivos con extensiones *.txt, *.doc y *.ppt.

# Create a directory named foo
mkdir foo && cd foo
# Create five *.txt files
touch {1..5}.txt
# Create five *.doc files
touch {1..5}.doc
# Create five *.ppt files
touch {1..5}.ppt
# List all the files in the directory

2. Luego, cambie a su terminal ubuntu2 y cree un directorio llamado bar . Este directorio será la ruta de destino de su copia.

# Create the folder
mkdir bar
# Display the new folder's full path
realpath bar

3. Vuelve a tu ubuntu1 terminal y ejecute el siguiente comando SCP. Tenga en cuenta que esta vez, en lugar de especificar una carpeta específica como fuente, su fuente contiene un comodín que coincide con cualquier archivo con un txt extensión dentro del foo carpeta.

scp *.txt [email protected]:/home/ata/bar/

Escriba la contraseña de la cuenta y la copia debería continuar. Como puede ver a continuación, el comando SCP solo copió el txt archivos a pesar de que la carpeta de origen tenga otros tipos de archivos.

4. Por último, cambie a la terminal ubuntu2 y enumere los archivos dentro de la barra directorio.

ls -l bar/

El resultado debería confirmar que solo existen archivos *.txt dentro del directorio.

Habilitación de la autenticación basada en claves

Escribir la contraseña de la cuenta de destino puede ser tedioso y engorroso. Además, la autenticación basada en contraseña es menos segura y no es adecuada para la automatización. ¿Cuál es la alternativa? Habilite la autenticación basada en claves.

Como sabe, el comando SCP usa SSH bajo el capó. Y SSH le brinda la opción de autenticarse usando claves SSH en lugar de contraseñas. Los pasos para configurar SCP con autenticación de clave SSH son los siguientes.

1. En ubuntu1 , genere un par de claves SSH ejecutando el comando ssh-keygen.

ssh-keygen -t rsa

2. Pulse Intro para aceptar la ruta predeterminada en la que guardar la clave. Finalmente, presione Entrar dos veces para no agregar una frase de contraseña a la clave.

Como puede ver a continuación, el comando creó dos archivos. El archivo id_rsa es su clave privada, que permanecerá en la computadora de origen. Por el contrario, debe copiar id_rsa.pub en el host de destino.

3. Ejecute el siguiente comando para copiar su clave pública en el host remoto ubuntu2 .

ssh-copy-id [email protected]

Ingrese la contraseña de la cuenta de destino cuando se le solicite para continuar con la copia de la clave pública.

4. Ahora que ha generado el par de claves SSH, ejecute el siguiente comando para copiar de forma segura backup.txt archivo de ubuntu1 a ubuntu2 . El argumento -i ~/.ssh/id_rsa le dice al comando SCP que se autentique con el archivo de clave SSH.

scp -i ~/.ssh/id_rsa backup.txt [email protected]:backup3.txt

El comando SCP ya no solicita la contraseña, como puede ver a continuación.

¡Eso es todo! Se ha deshecho de esa molesta solicitud de contraseña y ha hecho que su sesión SSH sea aún más segura.

Conclusión

Este artículo le enseñó cómo usar el comando SCP para copiar archivos entre dos sistemas Linux de forma segura. También aprendió a usar SCP con claves SSH para la autenticación. Ahora que conoce el comando SCP, pruébelo la próxima vez que necesite copiar uno en archivos masivos entre computadoras.


Linux
  1. Copie y pegue en la línea de comandos de Linux con xclip

  2. Copiar archivos y directorios en Linux

  3. Dividir archivos en fragmentos con el comando de división incorporado

  4. Uso del comando de búsqueda de Linux:uso con ejemplos

  5. ¿Cómo usar el comando Rsync en Linux?

Comando Cp en Linux (Copiar archivos)

Copie archivos y cree directorios de destino al mismo tiempo

Cómo encontrar archivos con el comando fd en Linux

Manera fácil de fusionar archivos con el comando Cat

Comando SCP de Linux para transferir archivos de forma segura

Cómo encontrar archivos con docenas de criterios con el comando Bash Find