Búsqueda de sitios web

Comando SCP Linux: transferir archivos de forma segura en Linux


Los administradores de Linux deben estar familiarizados con el entorno de línea de comandos. Dado que el modo GUI (Interfaz gráfica de usuario) en servidores Linux no es común instalarlo.

SSH puede ser el protocolo más popular para permitir a los administradores de Linux administrar los servidores de forma remota y segura. Integrado con el comando SSH hay un comando SCP, que se utiliza para copiar archivos entre servidores de forma segura.

Sintaxis básica del comando SCP

El siguiente comando se leerá como una copia “nombre_archivo_fuente” en “carpeta_destino” en “host_destino” usando el “nombre de usuario " cuenta.

scp source_file_name username@destination_host:destination_folder

Hay muchos parámetros en el comando SCP que puedes usar. Estos son los parámetros que pueden utilizarse en el uso diario.

Transferir archivos de forma segura en Linux

El comando SCP básico sin parámetros copiará los archivos en segundo plano. Los usuarios no verán nada a menos que se complete el proceso o aparezca algún error.

Puede utilizar el parámetro “-v” para imprimir información de depuración en la pantalla. Puede ayudarle a depurar problemas de conexión, autenticación y configuración.

Copie el archivo del host local al servidor remoto

El siguiente comando copia un archivo “scp-cheatsheet.pdf” de un sistema Linux local a uno remoto en el directorio /home/tecmint.

scp -v scp-cheatsheet.pdf [email :/home/tecmint/.

Resultado de muestra:

Executing: program /usr/bin/ssh host 192.168.0.183, user tecmint, command scp -v -t /home/tecmint/.
OpenSSH_8.2p1 Ubuntu-4ubuntu0.5, OpenSSL 1.1.1f  31 Mar 2020
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files
debug1: /etc/ssh/ssh_config line 21: Applying options for *
debug1: Connecting to 192.168.0.183 [192.168.0.183] port 22.
debug1: Connection established.
debug1: identity file /home/tecmint/.ssh/id_rsa type -1
debug1: identity file /home/tecmint/.ssh/id_rsa-cert type -1
debug1: identity file /home/tecmint/.ssh/id_dsa type -1
debug1: identity file /home/tecmint/.ssh/id_dsa-cert type -1
debug1: identity file /home/tecmint/.ssh/id_ecdsa type -1
debug1: identity file /home/tecmint/.ssh/id_ecdsa-cert type -1
debug1: identity file /home/tecmint/.ssh/id_ecdsa_sk type -1
debug1: identity file /home/tecmint/.ssh/id_ecdsa_sk-cert type -1
debug1: identity file /home/tecmint/.ssh/id_ed25519 type -1
debug1: identity file /home/tecmint/.ssh/id_ed25519-cert type -1
debug1: identity file /home/tecmint/.ssh/id_ed25519_sk type -1
debug1: identity file /home/tecmint/.ssh/id_ed25519_sk-cert type -1
debug1: identity file /home/tecmint/.ssh/id_xmss type -1
...

Copiar archivo del host remoto al host local

El siguiente comando copia un archivo “ssh-cheatsheet.pdf” de un host remoto a un sistema local en el directorio /home/tecmint.

scp -v [email :/home/ravi/ssh-cheatsheet.pdf /home/tecmint/.

Resultado de muestra:

Executing: program /usr/bin/ssh host 192.168.0.183, user tecmint, command scp -v -f /home/ravi/ssh-cheatsheet.pdf
OpenSSH_8.2p1 Ubuntu-4ubuntu0.5, OpenSSL 1.1.1f  31 Mar 2020
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files
debug1: /etc/ssh/ssh_config line 21: Applying options for *
debug1: Connecting to 192.168.0.183 [192.168.0.183] port 22.
debug1: Connection established.
debug1: identity file /home/tecmint/.ssh/id_rsa type -1
debug1: identity file /home/tecmint/.ssh/id_rsa-cert type -1
debug1: identity file /home/tecmint/.ssh/id_dsa type -1
debug1: identity file /home/tecmint/.ssh/id_dsa-cert type -1
debug1: identity file /home/tecmint/.ssh/id_ecdsa type -1
debug1: identity file /home/tecmint/.ssh/id_ecdsa-cert type -1
debug1: identity file /home/tecmint/.ssh/id_ecdsa_sk type -1
debug1: identity file /home/tecmint/.ssh/id_ecdsa_sk-cert type -1
debug1: identity file /home/tecmint/.ssh/id_ed25519 type -1
debug1: identity file /home/tecmint/.ssh/id_ed25519-cert type -1
debug1: identity file /home/tecmint/.ssh/id_ed25519_sk type -1
...

Copiar archivo desde un host remoto a otro host

El siguiente comando copia un archivo “ssh-cheatsheet.pdf” de un host remoto a otro sistema host remoto en el directorio /home/tecmint.

scp -v [email :/home/ravi/ssh-cheatsheet.pdf [email :/home/anusha/.

Copiar archivos con fecha y hora de creación original

El parámetro “-p” preservará los tiempos de modificación y acceso originales de los archivos mientras se copian los archivos junto con el tiempo estimado y la velocidad de conexión aparecerán en la pantalla.

scp -p scp-cheatsheet.pdf [email :/home/tecmint/.

Resultado de muestra:

[email 's password: 
scp-cheatsheet.pdf                                                                                                                                                                 100%  531   721.4KB/s   00:00    

Compresión Scp al copiar archivos

Uno de los parámetros que puede acelerar la transferencia de archivos es el parámetro “-C”, que se utiliza para comprimir sus archivos mientras viaja. Lo único es que la compresión sólo ocurre en la red. Cuando el archivo llegue al servidor de destino, volverá al tamaño original que tenía antes de que se produjera la compresión.

Eche un vistazo a estos comandos. Está utilizando un único archivo de 93 Mb.

scp -pv messages.log [email :.

Resultado de muestra:

Executing: program /usr/bin/ssh host 202.x.x.x, user mrarianto, command scp -v -p -t.
OpenSSH_6.0p1 Debian-3, OpenSSL 1.0.1c 10 May 2012
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to 202.x.x.x [202.x.x.x] port 22.
debug1: Connection established.
debug1: identity file /home/pungki/.ssh/id_rsa type -1
debug1: Found key in /home/pungki/.ssh/known_hosts:1
debug1: ssh_rsa_verify: signature correct
debug1: Trying private key: /home/pungki/.ssh/id_rsa
debug1: Next authentication method: password
[email 's password:
debug1: Authentication succeeded (password).
Authenticated to 202.x.x.x ([202.x.x.x]:22).
debug1: Sending command: scp -v -p -t.
File mtime 1323853868 atime 1380425711
Sending file timestamps: T1323853868 0 1380425711 0
messages.log 100% 93MB 58.6KB/s 27:05
Transferred: sent 97614832, received 25976 bytes, in 1661.3 seconds
Bytes per second: sent 58758.4, received 15.6
debug1: Exit status 0

Copiar archivos sin el parámetro “-C” resultará en 1661,3 segundos. Puede comparar el resultado con el siguiente comando utilizando el parámetro “-C".

scp -Cpv messages.log [email :.

Resultado de muestra:

Executing: program /usr/bin/ssh host 202.x.x.x, user mrarianto, command scp -v -p -t.
OpenSSH_6.0p1 Debian-3, OpenSSL 1.0.1c 10 May 2012
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to 202.x.x.x [202.x.x.x] port 22.
debug1: Connection established.
debug1: identity file /home/pungki/.ssh/id_rsa type -1
debug1: Host '202.x.x.x' is known and matches the RSA host key.
debug1: Found key in /home/pungki/.ssh/known_hosts:1
debug1: ssh_rsa_verify: signature correct
debug1: Next authentication method: publickey
debug1: Trying private key: /home/pungki/.ssh/id_rsa
debug1: Next authentication method: password
[email 's password:
debug1: Enabling compression at level 6.
debug1: Authentication succeeded (password).
Authenticated to 202.x.x.x ([202.x.x.x]:22).
debug1: channel 0: new [client-session]
debug1: Sending command: scp -v -p -t .
File mtime 1323853868 atime 1380428748
Sending file timestamps: T1323853868 0 1380428748 0
Sink: T1323853868 0 1380428748 0
Sending file modes: C0600 97517300 messages.log
messages.log 100% 93MB 602.7KB/s 02:38
Transferred: sent 8905840, received 15768 bytes, in 162.5 seconds
Bytes per second: sent 54813.9, received 97.0
debug1: Exit status 0
debug1: compress outgoing: raw data 97571111, compressed 8806191, factor 0.09
debug1: compress incoming: raw data 7885, compressed 3821, factor 0.48

Como puede ver, cuando utiliza compresión, el proceso de transferencia se realiza en 162,5 segundos. Es 10 veces más rápido que no utilizar el parámetro “-C”. Si está copiando muchos archivos a través de la red, el parámetro “-C” le ayudará a reducir el tiempo total que necesita.

Lo que debemos notar es que el método de compresión no funcionará en ningún archivo. Cuando el archivo fuente ya esté comprimido, no encontrará ninguna mejora allí. Los archivos como .zip, .rar, imágenes y .iso no se verán afectados por la extensión " -C” parámetro.

Cambiar el cifrado SCP para cifrar archivos

De forma predeterminada, SCP utiliza “AES-128” para cifrar archivos. Si desea cambiar a otro cifrado para cifrarlo, puede utilizar el parámetro “-c”.

Eche un vistazo a este comando.

scp -c 3des Label.pdf [email :.

[email 's password:
Label.pdf 100% 3672KB 282.5KB/s 00:13

El comando anterior le dice a SCP que utilice el algoritmo 3des para cifrar el archivo. Tenga cuidado de que este parámetro utilice “-c” y no “-C”.

Limitar el uso del ancho de banda con el comando SCP

Otro parámetro que puede resultar útil es el parámetro “-l”. El parámetro “-l” limitará el ancho de banda a utilizar. Será útil si realiza un script de automatización para copiar muchos archivos, pero no desea que el proceso SCP agote el ancho de banda.

scp -l 400 Label.pdf [email :.

[email 's password:
Label.pdf 100% 3672KB 50.3KB/s 01:13

El valor 400 detrás del parámetro “-l” significa que limitamos el ancho de banda para el proceso SCP a solo 50 KB/ seg.

Una cosa que debe recordar es que el ancho de banda se especifica en Kilobits/seg (kbps). Significa que 8 bits equivalen a 1 byte.

Mientras que SCP cuenta en Kilobyte/seg (KB/s). Entonces, si desea limitar su ancho de banda a un SCP máximo de solo 50 KB/s, debe configurarlo en 50. x8=400.

SCP con un puerto diferente

Normalmente, SCP utiliza el puerto 22 como puerto predeterminado, pero por razones de seguridad, puede cambiar el puerto a otro. Por ejemplo, estamos usando el puerto 2249.

Entonces el comando debería ser así.

scp -P 2249 Label.pdf [email :.

[email 's password:
Label.pdf 100% 3672KB 262.3KB/s 00:14

Asegúrese de que use “P” mayúscula, no “p”, ya que “p” ya se usa para tiempos y modos preservados.

SCP: copiar archivos y directorios de forma recursiva

A veces necesitamos copiar el directorio y todos los archivos/directorios que contiene. Será mejor si podemos hacerlo en un solo comando usando el parámetro “-r”, que copia todo el directorio de forma recursiva.

scp -r documents [email :.

[email 's password:
Label.pdf 100% 3672KB 282.5KB/s 00:13
scp.txt 100% 10KB 9.8KB/s 00:00

Cuando finalice el proceso de copia, en el servidor de destino encontrará un directorio llamado “documentos” con todos sus archivos. La carpeta “documentos” se crea automáticamente.

SCP: deshabilitar mensajes de progreso

Si elige no ver el medidor de progreso y los mensajes de advertencia/diagnóstico de SCP, puede desactivarlo usando el parámetro “-q”. He aquí un ejemplo.

scp -q Label.pdf [email :.

[email 's password:
pungki@mint ~/Documents $

Como puede ver, después de ingresar la contraseña, no hay información sobre el proceso SCP. Una vez completado el proceso, volverá a ver un mensaje.

SCP: copiar archivos mediante proxy

El servidor proxy se utiliza normalmente en el entorno de oficina. De forma nativa, SCP no es un proxy configurado. Cuando su entorno utiliza un proxy, debe “decir” a SCP que se comunique con el proxy.

Este es el escenario. La dirección del proxy es 10.0.96.6 y el puerto del proxy es 8080. El proxy también implementó la autenticación de usuario. Primero, debe crear el archivo “~/.ssh/config”. En segundo lugar, pones este comando dentro.

ProxyCommand /usr/bin/corkscrew 10.0.96.6 8080 %h %p ~/.ssh/proxyauth

Luego necesitas crear el archivo “~/.ssh/proxyauth” que contiene.

myusername:mypassword

Después de eso, puedes hacer SCP de forma transparente como de costumbre.

Tenga en cuenta que es posible que el sacacorchos aún no esté instalado en su sistema. En mi Linux Mint, primero necesito instalarlo, usando el procedimiento de instalación estándar de Linux Mint.

apt-get install corkscrew

Para otros sistemas basados en yum, los usuarios pueden instalar Corkscrew usando el siguiente comando yum.

yum install corkscrew

Otra cosa es que dado que el archivo “~/.ssh/proxyauth” contiene su “nombre de usuario” y su “contraseña” en formato de texto sin cifrar , asegúrese de que solo usted pueda acceder al archivo.

Elija un archivo ssh_config diferente

Para los usuarios de dispositivos móviles que cambian a menudo entre las redes de la empresa y las redes públicas, será complicado cambiar siempre la configuración en SCP. Es mejor si podemos colocar un archivo ssh_config diferente que se ajuste a nuestras necesidades.

El proxy se utiliza en la red de la empresa pero no en la red pública y usted cambia de red con regularidad.

scp -F /home/pungki/proxy_ssh_config Label.pdf

[email :.
[email 's password:
Label.pdf 100% 3672KB 282.5KB/s 00:13

De forma predeterminada, el archivo “ssh_config” por usuario se colocará en “~/.ssh/config”. Crear un archivo “ssh_config” específico con compatibilidad de proxy facilitará el cambio entre redes.

Cuando esté en la red de la empresa, puede utilizar el parámetro “-F”. Cuando esté en una red pública, puede omitir el parámetro “-F”.

Se trata de SCP. Puedes ver las páginas de manual de SCP para obtener más detalles. No dude en dejar comentarios y sugerencias.