Cómo usar el comando SCP en Linux

Un tutorial sencillo que le ayudará a transferir archivos a un sistema remoto desde su sistema Linux mediante el comando scp.

SCP significa "Copia segura". scp es una utilidad de línea de comandos ofrecida por Linux que permite la transferencia de archivos y directorios de una máquina a otra a través de una red insegura.

Si desea copiar archivos de un sistema a otro, entonces scp puede ser una muy buena opción para realizar una transferencia segura de los archivos y directorios. Cuando las dos máquinas que se comunican están conectadas a través de la misma red, entonces usa scp se vuelve posible.

Puede confiar en gran medida en scp comando de confidencialidad e integridad, ya que el archivo que se está transfiriendo y la contraseña utilizada para la transferencia están encriptados. No se revelará información confidencial incluso si alguien intenta espiar el tráfico mientras esta transferencia está en curso.

En este tutorial, veremos diferentes ejemplos de scp mando. También veremos algunas de las opciones de uso frecuente con el scp mando.

Empezando con el comando scp

Utilizando el scp comando puede transferir archivos / directorios:

  • Desde su máquina local a una máquina remota.
  • Entre dos máquinas remotas.
  • Desde una máquina remota a su máquina local.

Sintaxis general:

scp [Opción] [nombre_archivo_origen] [usuario @ host_destino]: carpeta_destino

Entendamos los atributos básicos de este comando uno por uno.

  • [nombre_archivo_origen] Este es el archivo de origen que desea copiar.
  • [user @ destination_Host] Este es el nombre de usuario del sistema remoto donde desea copiar el archivo. La dirección IP de la máquina remota también se utiliza en este atributo después de "@"Símbolo.
  • [carpeta de destino] Este es el directorio donde desea guardar el archivo copiado.

Nota: El colon (:) se utiliza en la sintaxis ya que diferencia entre las ubicaciones locales y remotas. Usamos los dos puntos (:) con el sistema remoto para especificar el directorio en el que se deben copiar los archivos. En caso de que no especifiquemos el directorio de destino, los archivos se copiarán al directorio de inicio del usuario del sistema remoto.

Opciones utilizadas con scp

Algunas de las opciones más populares utilizadas con el scp comando se enumeran a continuación.

OpciónDescripción
-Cpermitir que se transfiera la compresión del archivo
-vdar la salida detallada
-rcopiar archivos y directorios de forma recursiva
-pagspreservar los permisos, modos y tiempos de acceso de los archivos
-PAGScambiar el puerto predeterminado utilizado por scp mando

Veremos los ejemplos de estas opciones, más adelante en el tutorial.

Copiar archivo de un sistema local a un remoto

scp le permite transferir archivos desde su sistema local a un sistema remoto usando la siguiente sintaxis. Esto le permite transferir o cargar sus archivos a un servidor ubicado de forma remota.

Sintaxis general:

scp [nombre_archivo] usuario_remoto @ host: [carpeta_destino]

Ejemplo:

scp apache-tomcat-9.0.8.tar.gz [email protected]: gaurav

En este ejemplo, estamos copiando un archivo "apache-tomcat-9.0.8.tar.gz" del sistema local al sistema remoto cuya dirección IP es "143.110.178.221".

En el sistema remoto, el archivo ahora se copiará en el directorio llamado "gaurav".

Producción:

gaurav @ ubuntu: ~ $ scp apache-tomcat-9.0.8.tar.gz [email protected]: contraseña de gaurav [email protected]: apache-tomcat-9.0.8.tar.gz 100% 9589KB 79.8KB / s 02:00 gaurav @ ubuntu: ~ $ 

Comprobemos la salida en el sistema remoto del archivo.

root @ ubuntu-s-1vcpu-1gb-blr1-01: ~ / gaurav # ls apache-tomcat-9.0.8.tar.gz root @ ubuntu-s-1vcpu-1gb-blr1-01: ~ / gaurav #

Por lo tanto, el archivo se copia correctamente en el sistema remoto utilizando el scp mando.

Copiar varios archivos a un sistema remoto

En el ejemplo anterior, aprendimos a transferir un archivo al sistema remoto usando el scp mando. Ahora veremos el método para transferir varios archivos desde su sistema local a un sistema remoto usando este comando.

Sintaxis general:

scp [archivo 1] [archivo 2] [archivo n] nombre_usuario_remoto @ host_remoto: [directorio específico]

Entendamos este sencillo proceso con un ejemplo.

Ejemplo:

scp ath.html abc.txt ppa-purge_0.2.8 + bzr56_all.deb [email protected]: gaurav

Aquí, se mencionan varios archivos en el comando que se copiarán en el sistema remoto.

Producción:

gaurav @ ubuntu: ~ $ scp ath.html abc.txt ppa-purge_0.2.8 + bzr56_all.deb [email protected]: gaurav [email protected]'s contraseña: ath.html 100% 199KB 94.7KB / s 00: 02 abc.txt 100% 0 0.0KB / s 00:00 ppa-purge_0.2.8 + bzr56_all.deb 100% 4360 42.2KB / s 00:00 gaurav @ ubuntu: ~ $

En el sistema remoto:

root @ ubuntu-s-1vcpu-1gb-blr1-01: ~ / gaurav # ls -l total 9800 -rw-r - r-- 1 root root 0 5 de octubre 08:58 abc.txt -rw-r-- r-- 1 raíz raíz 9818695 5 de octubre 08:35 apache-tomcat-9.0.8.tar.gz -rw-r - r-- 1 raíz raíz 204057 5 de octubre 08:58 ath.html -rw-r-- r-- 1 root root 4360 5 de octubre 08:58 ppa-purge_0.2.8 + bzr56_all.deb root @ ubuntu-s-1vcpu-1gb-blr1-01: ~ / gaurav #

Los tres archivos ahora se copian en el sistema remoto.

Copiar un directorio al sistema remoto

Puedes usar scp comando para copiar un directorio de su sistema local al sistema remoto. El proceso es similar al de copiar un archivo. Para copiar también el contenido del directorio, puede utilizar el -r opción con la scp mando.

El -r La opción se utiliza para copiar un directorio de forma recursiva. Eso significa que también se copiarán todas las subcarpetas y archivos dentro del directorio.

Sintaxis general:

scp -r [ruta del directorio] nombre_usuario_remoto @ host_remoto: [directorio_destino]

Ejemplo:

scp -r PycharmProjects [email protected]: gaurav

Producción:

gaurav @ ubuntu: ~ $ scp -r PycharmProjects [email protected]: contraseña de gaurav [email protected]: __main__.py 100% 623 7.8KB / s 00:00 __init__.py 100% 23 0.4KB / s 00 : 00 finalización.py 100% 2929 28,1 KB / s 00:00 búsqueda.py 100% 4728 38,7 KB / s 00:00 desinstalación.py 100% 2963 32,5 KB / s 00:00 hash.py 100% 1681 21,3 KB / s 00:00 check.py 100% 1430 16.8KB / s 00:00 configuration.py 100% 7125 50.4KB / s 00:00 show.py 100% 6289 49.8KB / s 00:00 download.py 100% 6623 48.2 KB / s 00:00 gaurav @ ubuntu: ~ $ 

Utilizando el -r opción con la scp comando copia todas las subcarpetas y archivos dentro del directorio desde la máquina local al sistema remoto.

Visualización de información detallada sobre el proceso scp

Puedes usar el -v (minúscula v) para mostrar la información sobre los archivos que se están copiando en un sistema remoto o local. Este tipo de salida también se denomina salida detallada.

Cuando se utiliza esta opción, la información de depuración completa sobre el archivo se muestra en la pantalla.

Sintaxis general:

scp -v [nombre_archivo] nombre_usuario @ host_usuario:

Ejemplo:

scp -v apache-tomcat-9.0.8.tar.gz [email protected]: equipo

Producción:

gaurav @ ubuntu: ~ $ scp -v apache-tomcat-9.0.8.tar.gz [email protected]: equipo Ejecutando: programa / usr / bin / ssh host 159.89.170.11, usuario root, comando scp -v -t equipo OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n 7 de diciembre de 2017 debug1: lectura de datos de configuración /home/gaurav/.ssh/config debug1: lectura de datos de configuración / etc / ssh / ssh_config debug1: / etc / ssh / ssh_config línea 19: Aplicando opciones para * debug1: Conectando a 159.89.170.11 [159.89.170.11] puerto 22. debug1: Conexión establecida. debug1: key_load_public: No existe tal archivo o directorio debug1: archivo de identidad /home/gaurav/.ssh/id_rsa tipo -1 apache-tomcat-9.0.8.tar.gz 100% 9589KB 99.8KB / s 01:36 debug1: client_input_channel_req: canal 0 rtype exit-status reply 0 debug1: canal 0: libre: cliente-sesión, nchannels 1 debug1: fd 0 clearing O_NONBLOCK debug1: fd 1 clearing O_NONBLOCK Transferido: enviado 9826736, recibido 4016 bytes, en 97.2 segundos Bytes por segundo: enviado 101133.9, recibió 41.3 debug1: estado de salida 0 gaurav @ ubuntu: ~ $ 

Aquí, en la salida, puede ver que la información de depuración del archivo se muestra en su terminal cuando el scp El comando se usa con el -v opción.

Transferencia de archivos entre dos hosts remotos

Linux le permite conectarse a varios hosts remotos. Puede transferir archivos y directorios entre dos hosts remotos utilizando el scp mando.

Sintaxis general:

scp usuario_remoto_1 @ host_1: / [nombre_archivo] usuario_remoto_2 @ host_2: [carpeta_para_guardar]

La sintaxis puede parecer un poco más amplia, pero es bastante simple. Aquí, la primera parte del comando proporciona la entrada sobre el usuario remoto desde donde se copiará el archivo. dos puntos (:) y / se utiliza para especificar el nombre del archivo o el nombre del directorio que se transferirá entre las dos máquinas remotas.

La segunda parte proporciona información sobre el sistema remoto de destino donde se copiará el archivo.

Ejemplo:

scp -r [email protected]: gaurav [email protected]: / equipo

Aquí, copiaremos un directorio llamado "gaurav" de forma recursiva desde el sistema local a un sistema remoto. El archivo se copiará a una carpeta "equipo" en el sistema remoto.

Producción:

gaurav @ ubuntu: ~ $ scp -r [email protected]: / gaurav [email protected]: / team [email protected]'s contraseña: 1.py 100% 134 261.3KB / s 00:00 variables.py 100% 377949.2KB / s 00:00 abc.txt 100% 0 0.0KB / s 00:00 ath.html 100% 199KB 41.8MB / s 00:00 gaurav @ ubuntu: ~ $

Aquí, usamos el scp comando en el sistema local para transferir un directorio llamado "gaurav" de un servidor remoto a otro.

Transfiera archivos desde el sistema remoto a su sistema local

Puede transferir fácilmente los archivos o directorios desde el sistema remoto a su sistema local utilizando el scp mando. En palabras más simples, puede descargar múltiples archivos o directorios desde el servidor remoto a su sistema local usando el scp mando.

Sintaxis general:

scp nombre_usuario_remoto @ host_usuario: /files/file.txt / [carpeta_del_sistema_local]

Producción:

gaurav @ ubuntu: ~ $ scp [email protected]: how.txt. [email protected]'s contraseña: how.txt 100% 11 0.1KB / s 00:00 gaurav @ ubuntu: ~ $

Aquí, he descargado (copiado) el archivo del servidor remoto a mi directorio personal. Por lo tanto, he usado dot (.) para especificar en el comando para copiar el archivo a mi directorio de inicio.

Salida de muestra:

gaurav @ ubuntu: ~ $ ls -l how.txt -rw-r - r-- 1 gaurav gaurav 11 6 de octubre 09:49 how.txt gaurav @ ubuntu: ~ $ 

Aquí, el archivo ahora se copia a mi directorio de inicio desde el servidor remoto.

De la misma forma, puede descargar varios archivos o directorios desde el servidor remoto utilizando el scp comando con las opciones apropiadas.

Comprimir archivos para hacer transferencias más rápidas

A veces, la transferencia de archivos grandes puede llevar mucho tiempo. Este problema se puede solucionar utilizando el scp comando con el -C (mayúscula C) opción.

Utilizando el -C opción, comprime los archivos de mayor tamaño, lo que facilita una transferencia más rápida y, por lo tanto, ahorra tiempo.

Un hecho interesante sobre esta opción es que el archivo se copia con su tamaño original en el sistema de destino, pero durante el proceso de transferencia, el tamaño se comprime para permitir una transferencia más rápida. Por lo tanto, la compresión solo se realiza en la red.

Sintaxis general:

scp -C [nombre_archivo] nombre_usuario @ host_usuario: [carpeta_destino]

Veamos un ejemplo comparativo para entender la diferencia.

Transferencia sin opción -C:

gaurav @ ubuntu: ~ $ scp -rv dlink [email protected]: equipo Ejecutando: programa / usr / bin / ssh host 68.183.82.183, usuario root, comando scp -v -r -t equipo OpenSSH_7.6p1 Ubuntu-4ubuntu0. 3, OpenSSL 1.0.2n 7 de diciembre de 2017 debug1: Lectura de datos de configuración /home/trinity/.ssh/config debug1: Lectura de datos de configuración / etc / ssh / ssh_config debug1: / etc / ssh / ssh_config línea 19: Aplicación de opciones para * debug1 : Conectando a 68.183.82.183 [68.183.82.183] puerto 22. debug1: Conexión establecida. debug1: client_input_channel_req: channel 0 rtype exit-status reply 0 debug1: channel 0: free: client-session, nchannels 1 debug1: fd 0 clearing O_NONBLOCK debug1: fd 1 clearing O_NONBLOCK Transferido: enviado 7516504, recibido 4008 bytes, en 74,6 segundos Bytes por segundo: envió 100693.7, recibió 53.7 debug1: estado de salida 0 gaurav @ ubuntu: ~ $ 

De la salida anterior podemos ver que el tiempo requerido para la transferencia es de 74,6 segundos. Intentaremos transferir el mismo archivo usando la opción -C y observaremos la diferencia.

Transferir con opción -C:

gaurav @ ubuntu: ~ $ scp -Crv dlink [email protected]: equipo Ejecutando: programa / usr / bin / ssh host 68.183.82.183, usuario root, comando scp -v -r -t equipo OpenSSH_7.6p1 Ubuntu-4ubuntu0. 3, OpenSSL 1.0.2n 7 de diciembre de 2017 debug1: Lectura de datos de configuración /home/trinity/.ssh/config debug1: Lectura de datos de configuración / etc / ssh / ssh_config debug1: / etc / ssh / ssh_config línea 19: Aplicación de opciones para * debug1 : Conectando a 68.183.82.183 [68.183.82.183] puerto 22. debug1: Conexión establecida. . . webupload.img 100% 1834KB 98.7KB / s 00:18 Modos de envío de archivos: C0664 1877552 router.img Sink: C0664 1877552 router.img router.img 100% 1834KB 100.3KB / s 00:18 Sink: E Modos de envío de archivos: C0664 3754103 DSL-2750U-Release-IN-T-01.00.07.zip Fregadero: C0664 3754103 DSL-2750U-Release-IN-T-01.00.07.zip DSL-2750U-Release-IN-T-01.00.07.zip 100% 3666KB 218.5KB / s 00:16 Sumidero: E debug1: client_input_channel_req: canal 0 rtype exit-status reply 0 debug1: canal 0: libre: sesión de cliente, nchannels 1 debug1: fd 0 clearing O_NONBLOCK debug1: fd 1 clearing O_NONBLOCK Transferido: enviado 7518864, recibido 3828 bytes, en 51.0 segundos Bytes por segundo: enviado 100245.4, recibido 51.0 debug1: estado de salida 0 debug1: comprimir saliente: datos sin procesar 7511925, comprimido 7513136, factor 1.00 debug1: comprimir entrante: datos sin procesar 1467, comprimido 999, factor 0,68 gaurav @ ubuntu: ~ $

Aquí, podemos observar fácilmente que usando el -C opción con la scp El comando nos ha permitido comprimir el archivo a través de la red, demostrando ser una opción para ahorrar tiempo.

Usando un puerto ssh diferente para la transferencia de archivos

Mientras usa el scp comando el puerto predeterminado que se implementa es el puerto 22. El usuario tiene la libertad de personalizar esta opción de puerto. Puedes usar el -PAGS (opción P mayúscula) con la scp comando para usar el puerto de su elección.

Sintaxis general:

cp -P [número_puerto_nuevo] [nombre_archivo / nombre_directorio] usuario_remoto @ host: [carpeta_destino]

Ejemplo:

scp -P 4248 dlink [email protected]: equipo

Usando el comando anterior, el archivo se transferirá al servidor remoto. Pero esta vez, el puerto utilizado será puerto 4248 en lugar del predeterminado puerto 22.

Conclusión

Después de seguir este tutorial, hemos aprendido sobre la naturaleza dinámica de la scp comando utilizado para transferir o copiar archivos de un sistema a otro. Esta opción también se puede utilizar para descargar archivos o directorios desde el servidor remoto. Por tanto, podemos concluir que scp El comando resulta muy útil para las transferencias de archivos cuando tiene que manejar más de un sistema, así como servidores remotos simultáneamente.