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 que esté instalado.
SSH podría ser el protocolo más popular para permitir que los administradores de Linux administren los servidores de manera remota y segura. Integrado con el comando SSH se encuentra el comando SCP, que se utiliza para copiar archivo(s) entre servidores de manera segura.
Sintaxis Básica del Comando SCP
El siguiente comando se leerá como copiar “nombre_del_archivo_fuente” en “carpeta_destino” en “host_destino” utilizando la cuenta “nombre_de_usuario“.
scp source_file_name username@destination_host:destination_folder
Hay muchos parámetros en el comando SCP que puedes usar. Aquí están los parámetros que podrías usar en el uso diario.
Tabla de Contenidos
Transferir Archivos de Manera Segura en Linux
El comando básico SCP sin parámetros copiará los archivos en segundo plano. Los usuarios no verán nada a menos que el proceso se complete o aparezca algún error.
Puedes usar el parámetro ” -v
” para imprimir información de depuración en la pantalla. Puede ayudarte a depurar problemas de conexión, autenticación y configuración.
Copiar Archivo Desde el Host Local Hasta el Servidor Remoto
El siguiente comando copia un archivo “scp-cheatsheet.pdf” desde un sistema local a un sistema remoto de Linux bajo el directorio /home/tecmint.
$ scp -v scp-cheatsheet.pdf [email protected]:/home/tecmint/.
Salida 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 desde el host remoto al host local
El siguiente comando copia un archivo “ssh-cheatsheet.pdf” desde un host remoto a un sistema local bajo el directorio /home/tecmint.
$ scp -v [email protected]:/home/ravi/ssh-cheatsheet.pdf /home/tecmint/.
Salida 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 el host remoto a otro host
El siguiente comando copia un archivo “ssh-cheatsheet.pdf” desde un host remoto a otro sistema remoto bajo el directorio /home/tecmint.
$ scp -v [email protected]:/home/ravi/ssh-cheatsheet.pdf [email protected]:/home/anusha/.
Copiar archivos con la fecha y hora de creación original
El parámetro “-p
” preservará los tiempos de modificación y acceso originales de los archivos al copiar archivos, junto con el tiempo estimado y la velocidad de conexión que aparecerán en la pantalla.
$ scp -p scp-cheatsheet.pdf [email protected]:/home/tecmint/.
Salida de muestra:
[email protected]'s password: scp-cheatsheet.pdf 100% 531 721.4KB/s 00:00
Compresión Scp al copiar archivos
Uno de los parámetros que pueden acelerar la transferencia de archivos es el parámetro “-C
“, que se utiliza para comprimir sus archivos en el acto. Lo único es que la compresión solo ocurre en la red. Cuando el archivo ha llegado al servidor de destino, volverá a su tamaño original antes de que ocurriera la compresión.
Echa un vistazo a estos comandos. Se trata de un solo archivo de 93 Mb.
$ scp -pv messages.log [email protected]:.
Salida 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 protected]'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
” dará como resultado 1661.3 segundos. Puede comparar el resultado con el comando a continuación utilizando el parámetro “-C"
.
$ scp -Cpv messages.log [email protected]:.
Salida 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 protected]'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 está utilizando compresión, el proceso de transferencia se completa en 162.5 segundos. Es 10 veces más rápido que no usar el parámetro “-C
“. Si está copiando muchos archivos a través de la red, el parámetro “-C
” le ayudaría a reducir el tiempo total que necesita.
Lo que debemos tener en cuenta es que el método de compresión no funcionará en cualquier archivo. Cuando el archivo de origen ya está comprimido, no encontrará ninguna mejora allí. Archivos como .zip, .rar, imágenes, y .iso archivos no se verán afectados por el parámetro “-C
“.
Cambiar el cifrado SCP para encriptar archivos
Por defecto, SCP utiliza “AES-128” para encriptar archivos. Si deseas cambiar a otro cifrado para encriptarlo, puedes utilizar el parámetro “-c
“.
Echa un vistazo a este comando.
$ scp -c 3des Label.pdf [email protected]:. [email protected]'s password: Label.pdf 100% 3672KB 282.5KB/s 00:13
El comando anterior indica a SCP que utilice el algoritmo 3des para encriptar el archivo. Ten cuidado de que este parámetro utiliza “-c
” y no “-C
“.
Limitar el uso de ancho de banda con el comando SCP
Otro parámetro que puede ser útil es el “-l
“. El “-l” limita el ancho de banda a utilizar. Será útil si realizas un script de automatización para copiar muchos archivos, pero no deseas que el ancho de banda se agote por el proceso de SCP.
$ scp -l 400 Label.pdf [email protected]:. [email protected]'s password: Label.pdf 100% 3672KB 50.3KB/s 01:13
El valor 400 detrás del “-l
” significa que limitamos el ancho de banda para el proceso SCP a solo 50 KB/seg.
Una cosa a recordar es que el ancho de banda se especifica en Kilobits/seg (kbps). Significa que 8 bits son iguales a 1 byte.
Mientras que SCP cuenta en Kilobyte/sec (KB/s). Entonces, si deseas limitar tu ancho de banda a un SCP máximo de solo 50 KB/s, debes configurarlo en 50 x 8 = 400.
SCP con un Puerto Diferente
Por lo general, SCP utiliza el puerto 22 como puerto predeterminado, pero por razones de seguridad, es posible que desees 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 protected]:. [email protected]'s password: Label.pdf 100% 3672KB 262.3KB/s 00:14
Asegúrate de que utilice una “P” mayúscula y no una “p” minúscula, ya que “p” ya se utiliza para tiempos y modos preservados.
SCP – Copiar Archivos y Directorios de Forma Recursiva
A veces necesitamos copiar el directorio y todos los archivos/directorios dentro de él. Será mejor si podemos hacerlo en un solo comando utilizando el parámetro “r”, que copia todo el directorio de forma recursiva.
$ scp -r documents [email protected]:. [email protected]'s password: Label.pdf 100% 3672KB 282.5KB/s 00:13 scp.txt 100% 10KB 9.8KB/s 00:00
Cuando se completa el proceso de copia, en el servidor de destino encontrarás un directorio llamado “documentos” con todos sus archivos. La carpeta “documentos” se crea automáticamente.
SCP – Desactivar Mensajes de Progreso
Si decides no ver el medidor de progreso y las advertencias / mensajes de diagnóstico de SCP, puedes desactivarlos utilizando el parámetro “-q
“. Aquí tienes un ejemplo.
$ scp -q Label.pdf [email protected]:. [email protected]'s password: pungki@mint ~/Documents $
Como puedes ver, después de ingresar la contraseña, no hay información sobre el proceso de SCP. Después de que se complete el proceso, verás un mensaje de aviso nuevamente.
SCP – Copiar Archivos Usando Proxy
El servidor proxy suele utilizarse en el entorno de oficina. Nativa, SCP no está configurado para un proxy. Cuando tu entorno usa un proxy, debes “decir” a SCP que se comunique con el proxy.
Aquí está el escenario. La dirección del proxy es 10.0.96.6 y el puerto del proxy es 8080. El proxy también implementa la autenticación de usuarios. Primero, necesitas crear el archivo “~/.ssh/config”. Segundo, pones este comando dentro de él.
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 manera transparente como de costumbre.
Tenga en cuenta que el corkscrew podría no estar instalado todavía en su sistema. En mi Linux Mint, primero necesito instalarlo, utilizando 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 utilizando el siguiente comando yum.
# yum install corkscrew
Otra cosa es que ya que el archivo “~/.ssh/proxyauth” contiene tu “nombre de usuario” y “contraseña” en formato de texto claro, por favor asegúrate de que el archivo solo pueda ser accedido por ti.
Elige un archivo diferente de ssh_config
Para los usuarios móviles que cambian con frecuencia entre las redes corporativas y las redes públicas, será una tortura tener que cambiar siempre la configuración en SCP. Sería mejor si pudiéramos poner un archivo ssh_config diferente para adaptarnos a nuestras necesidades.
El proxy se usa en la red corporativa pero no en la red pública y cambias regularmente de red.
$ scp -F /home/pungki/proxy_ssh_config Label.pdf [email protected]:. [email protected]'s password: Label.pdf 100% 3672KB 282.5KB/s 00:13
Por defecto, 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és en la red corporativa, puedes usar el parámetro “-F
”. Cuando estés en una red pública, puedes omitir el parámetro “-F
”.
Eso es todo acerca de SCP. Puedes ver las páginas de manual de SCP para obtener más detalles. No dudes en dejar comentarios y sugerencias.