SCP (Secure Copy) es una herramienta de línea de comandos en sistemas similares a Linux y Unix que se utiliza para transferir archivos y directorios a través de los sistemas de forma segura a través de la red. Cuando usamos el comando scp para copiar archivos y directorios de nuestro sistema local a un sistema remoto, en el backend hace conexión ssh al sistema remoto. En otras palabras, podemos decir que scp usa el mismo mecanismo de seguridad SSH en el backend, necesita una contraseña o claves para la autenticación.
En este tutorial, discutiremos el comando scp en Linux con ejemplos prácticos.
Sintaxis del comando scp:
# scp
# scp
La primera sintaxis del comando scp demuestra cómo copiar archivos o directorios del sistema local al host de destino en la carpeta específica.
La segunda sintaxis del comando scp demuestra cómo los archivos del host de destino se copian en el sistema local.
Algunas de las opciones más utilizadas en el comando scp se enumeran a continuación,
- -C Activar compresión
- -i Archivo de identidad o clave privada
- -l limita el ancho de banda al copiar
- -P número de puerto ssh del host de destino
- -p Conserva los permisos, los modos y el tiempo de acceso de los archivos mientras se copian
- -q Suprimir mensaje de advertencia de SSH
- -r Copiar archivos y directorios de forma recursiva
- -v salida detallada
¡Pasemos ahora a los ejemplos!
Ejemplo 1) Copie un archivo del sistema local al sistema remoto usando scp
Supongamos que queremos copiar el paquete jdk rpm de nuestro sistema Linux local al sistema remoto (172.20.10.8) usando el comando scp, use el siguiente comando,
[[email protected] ~]$ scp jdk-linux-x64_bin.rpm [email protected]:/opt [email protected]'s password: jdk-linux-x64_bin.rpm 100% 10MB 27.1MB/s 00:00 [[email protected] ~]$
El comando anterior copiará el archivo del paquete jdk rpm al sistema remoto en la carpeta /opt.
Ejemplo 2) Copie un archivo del sistema remoto al sistema local usando scp
Supongamos que queremos copiar un archivo desde un sistema remoto a nuestro sistema local en la carpeta /tmp, ejecute el siguiente comando scp,
[[email protected] ~]$ scp [email protected]:/root/Technical-Doc-RHS.odt /tmp [email protected]'s password: Technical-Doc-RHS.odt 100% 1109KB 31.8MB/s 00:00 [[email protected] ~]$ ls -l /tmp/Technical-Doc-RHS.odt -rwx------. 1 pkumar pkumar 1135521 Oct 19 11:12 /tmp/Technical-Doc-RHS.odt [[email protected] ~]$
Ejemplo 3) Salida detallada al transferir archivos usando scp (-v)
En el comando scp, podemos habilitar la salida detallada usando la opción -v, usando la salida detallada podemos encontrar fácilmente qué está sucediendo exactamente en segundo plano. Esto se vuelve muy útil en la conexión de depuración , autenticación y problemas de configuración .
[email protected] ~]$ scp -v jdk-linux-x64_bin.rpm [email protected]:/opt Executing: program /usr/bin/ssh host 172.20.10.8, user root, command scp -v -t /opt OpenSSH_7.8p1, OpenSSL 1.1.1 FIPS 11 Sep 2018 debug1: Reading configuration data /etc/ssh/ssh_config debug1: Reading configuration data /etc/ssh/ssh_config.d/05-redhat.conf debug1: Reading configuration data /etc/crypto-policies/back-ends/openssh.config debug1: /etc/ssh/ssh_config.d/05-redhat.conf line 8: Applying options for * debug1: Connecting to 172.20.10.8 [172.20.10.8] port 22. debug1: Connection established. ………… debug1: Next authentication method: password [email protected]'s password:
Ejemplo 4) Transferir múltiples archivos a un sistema remoto
Se pueden copiar/transferir varios archivos al sistema remoto usando el comando scp de una sola vez, en el comando scp especifique los archivos múltiples separados por espacio, el ejemplo se muestra a continuación
[[email protected] ~]$ scp install.txt index.html jdk-linux-x64_bin.rpm \ [email protected]:/mnt [email protected]'s password: install.txt 100% 0 0.0KB/s 00:00 index.html 100% 85KB 7.2MB/s 00:00 jdk-linux-x64_bin.rpm 100% 10MB 25.3MB/s 00:00 [[email protected] ~]$
Ejemplo 5) Transferir archivos a través de dos hosts remotos
Usando el comando scp podemos copiar archivos y directorios entre dos hosts remotos, supongamos que tenemos un sistema Linux local que puede conectarse a dos sistemas Linux remotos, entonces desde mi sistema Linux local puedo usar el comando scp para copiar archivos en estos dos sistemas,
Sintaxis:
# scp [correo electrónico protegido]_hosts1:/
El ejemplo se muestra a continuación,
# scp [email protected]:~/backup-Oct.zip [email protected]:/tmp # ssh [email protected] "ls -l /tmp/backup-Oct.zip" -rwx------. 1 root root 747438080 Oct 19 12:02 /tmp/backup-Oct.zip
Ejemplo 6) Copiar archivos y directorios recursivamente (-r)
Use la opción -r en el comando scp para copiar recursivamente todo el directorio de un sistema a otro, el ejemplo se muestra a continuación,
[[email protected] ~]$ scp -r Downloads [email protected]:/opt
Use el siguiente comando para verificar si la carpeta de descarga se copia al sistema remoto o no,
[[email protected] ~]$ ssh [email protected] "ls -ld /opt/Downloads" drwxr-xr-x. 2 root root 75 Oct 19 12:10 /opt/Downloads [[email protected] ~]$
Ejemplo 7) Aumente la velocidad de transferencia habilitando la compresión (-C)
En el comando scp, podemos aumentar la velocidad de transferencia al habilitar la compresión usando la opción -C, automáticamente habilitará la compresión en el origen y la descompresión en el host de destino.
[email protected] ~]$ scp -r -C Downloads [email protected]:/mnt
En el ejemplo anterior, estamos transfiriendo el directorio de descarga con la compresión habilitada.
Ejemplo 8) Limite el ancho de banda al copiar ( -l )
Use la opción '-l' en el comando scp para limitar el uso del ancho de banda durante la copia. El ancho de banda se especifica en Kbit/s, el ejemplo se muestra a continuación,
[[email protected] ~]$ scp -l 500 jdk-linux-x64_bin.rpm [email protected]:/var
Ejemplo 9) Especifique un puerto ssh diferente mientras scp (-P)
Puede haber algún escenario en el que se cambie el puerto ssh en el host de destino, por lo que al usar el comando scp podemos especificar el número de puerto ssh usando la opción '-P'.
[[email protected] ~]$ scp -P 2022 jdk-linux-x64_bin.rpm [email protected]:/var
En el ejemplo anterior, el puerto ssh para el host remoto es "2022"
Ejemplo 10) Conserva los permisos, modos y tiempos de acceso de los archivos mientras se copian (-p)
Use la opción "-p" en el comando scp para conservar los permisos, el tiempo de acceso y los modos mientras copia del origen al destino
[[email protected] ~]$ scp -p jdk-linux-x64_bin.rpm [email protected]:/var/tmp jdk-linux-x64_bin.rpm 100% 10MB 13.5MB/s 00:00 [[email protected] ~]$
Ejemplo 11) Transferencia de archivos en modo silencioso (-q) en scp
Use la opción '-q' en el comando scp para suprimir el progreso de la transferencia, los mensajes de advertencia y de diagnóstico de ssh. El ejemplo se muestra a continuación,
[[email protected] ~]$ scp -q -r Downloads [email protected]:/var/tmp [[email protected] ~]$
Ejemplo 12) Use el archivo de identificación en scp mientras transfiere (-i)
En la mayoría de los entornos Linux, se prefiere la autenticación basada en claves. En el comando scp, especificamos el archivo de identificación o el archivo de clave privada usando la opción '-i', el ejemplo se muestra a continuación,
[[email protected] ~]$ scp -i my_key.pem -r Downloads [email protected]:/root
En el ejemplo anterior, "my_key.pem" es el archivo de identidad o el archivo de clave privada.
Ejemplo 13) Usar un archivo 'ssh_config' diferente en scp (-F)
Hay algunos escenarios en los que usa diferentes redes para conectarse a sistemas Linux, puede ser que alguna red esté detrás de servidores proxy, por lo que en ese caso debemos tener diferentes ssh_config archivo.
Se especifica un archivo ssh_config diferente en el comando scp a través de la opción '-F', el ejemplo se muestra a continuación
[[email protected] ~]$ scp -F /home/pkumar/new_ssh_config -r Downloads \ [email protected]:/root [email protected]'s password: jdk-linux-x64_bin.rpm 100% 10MB 16.6MB/s 00:00 backup-Oct.zip 100% 713MB 41.9MB/s 00:17 index.html 100% 85KB 6.6MB/s 00:00 [[email protected] ~]$
Ejemplo 14) Usar un cifrado diferente en el comando scp (-c)
De forma predeterminada, scp utiliza el cifrado 'AES-128' para cifrar los archivos. Si desea usar otro cifrado en el comando scp, use la opción '-c' seguida del nombre del cifrado,
Supongamos que queremos usar el cifrado '3des-cbc' en el comando scp al transferir los archivos, ejecute el siguiente comando scp
[[email protected] ~]# scp -c 3des-cbc -r Downloads [email protected]:/root
Use el siguiente comando para enumerar los cifrados ssh y scp,
[[email protected] ~]# ssh -Q cipher localhost | paste -d , -s - 3des-cbc,aes128-cbc,aes192-cbc,aes256-cbc,[email protected],\ aes128-ctr,aes192-ctr,aes256-ctr,[email protected],[email protected],\ [email protected] [[email protected] ~]#
Eso es todo de este tutorial, para obtener más detalles sobre el comando scp, consulte su página de manual. Comparta sus opiniones y comentarios en la sección de comentarios a continuación.
Leer también : 11 ejemplos de comandos 'df' en Linux