comando scp – Secure copy

Scp (Secure Copy) es una herramienta de línea de comandos para copiar o transferir archivos entre hosts. Utiliza el mismo tipo de mecanismo de seguridad que el programa ssh.

De hecho, utiliza una conexión ssh en segundo plano para realizar la transferencia de archivos. scp se refiere tanto al «protocolo» que define cómo debe funcionar la copia segura como al «programa» (comando) que se instala como parte de la suite de herramientas OpenSSH.

En este rápido tutorial veremos algunos ejemplos el comando scp y cómo se puede utilizar para transferir archivos de forma segura.

Cómo instalar scp

Scp se instala generalmente por defecto en la mayoría de las distros de linux como parte de los paquetes openssh. En ubuntu/debian por ejemplo, el paquete openssh-client proporciona el programa scp.

$ dpkg -L openssh-client | grep scp/usr/bin/scp/usr/share/man/man1/scp.1.gz

Es el paquete OpenSSH el que proporciona los programas ssh, scp, sftp junto con muchas otras herramientas. Así que no tenemos que hacer nada extra aquí, excepto usar y aprender el programa.

Usando scp – sintaxis básica

La sintaxis básica de scp es muy sencilla de memorizar. Tiene el siguiente aspecto

$ scp source_file_path destination_file_path

Dependiendo del host, la ruta del archivo debe incluir la dirección completa del host, el número de puerto, el nombre de usuario y la contraseña junto con la ruta del directorio.

Así que si estás «enviando» un archivo desde tu máquina local a una máquina remota (subiendo) la sintaxis se vería así

$ scp ~/my_local_file.txt _host.com:/some/remote/directory

Cuando se copia un archivo desde un host remoto a un host local (descargando), se ve justo lo contrario

$ scp _host.com:/some/remote/directory ~/my_local_file.txt# just download the file$ scp :/some/path/file.txt .

Eso es más o menos sobre el uso de scp para las tareas regulares. Aparte de esto, hay un par de opciones y funciones adicionales que scp soporta. Vamos a echar un vistazo rápido a esos.

Y sí, por defecto scp siempre sobrescribirá los archivos en el destino. Si necesita evitarlo, utilice una herramienta más potente llamada rsync.

Ejemplos de comandos scp

1. Salida verbosa

Con la salida verbosa, el programa scp emitiría mucha información sobre lo que hace en segundo plano. Esto suele ser útil cuando el programa falla o no puede completar la solicitud. La salida verbose indicaría entonces el punto exacto en el que el programa tuvo problemas.

$ scp -v ~/test.txt :/root/help2356.txtExecuting: program /usr/bin/ssh host 192.168.1.3, user root, command scp -v -t /root/help2356.txtOpenSSH_6.2p2 Ubuntu-6ubuntu0.1, OpenSSL 1.0.1e 11 Feb 2013debug1: Reading configuration data /home/enlightened/.ssh/configdebug1: Reading configuration data /etc/ssh/ssh_configdebug1: /etc/ssh/ssh_config line 19: Applying options for *debug1: Connecting to 192.168.1.3 port 22.debug1: Connection established...... OUTPUT TRUNCATED

La salida sería grande y contendría información detallada sobre cómo se realiza la conexión, qué archivos de configuración e identidad se están utilizando, etc.

2. Transferir múltiples archivos

Se pueden especificar múltiples archivos separados por un espacio así

$ scp foo.txt bar.txt :/path/directory/

Para copiar múltiples archivos del host remoto al directorio local actual

$ scp :/path/directory/\{foo.txt,bar.txt\} .$ scp :~/\{abc.log,cde.txt\} .

3. Copiar todo el directorio (de forma recursiva)

Para copiar un directorio completo de un host a otro utilice el modificador r y especifique el directorio

$ scp -v -r ~/Downloads :/root/Downloads

4. Copiar archivos a través de 2 hosts remotos

Scp puede copiar archivos de 1 host remoto a otro host remoto también.

$ scp :/some/remote/dir/foobar.txt :/some/remote/dir/

5. Acelerar la transferencia con la compresión

Una opción súper genial para acelerar la transferencia para ahorrar tiempo y ancho de banda. Todo lo que necesitas hacer es utilizar la opción C para activar la compresión. Los archivos se comprimen sobre la marcha y se descomprimen en el destino.

$ scp -vrC ~/Downloads :/root/Downloads

En el ejemplo anterior hemos movido todo el directorio con la compresión activada. La ganancia de velocidad dependerá de cuánto se puedan comprimir los archivos.

6. Limitar el uso del ancho de banda

Si no quiere que scp ocupe todo el ancho de banda disponible, utilice la opción l para limitar la velocidad máxima en Kbit/s.

$ scp -vrC -l 400 ~/Downloads :/root/Downloads

7. Conectarse a un número de puerto diferente en el host remoto

Si el servidor remoto tiene el demonio ssh ejecutándose en un puerto diferente (por defecto es el 22), entonces necesita decirle a scp que use ese número de puerto en particular usando la opción ‘-P’.

$ scp -vC -P 2200 ~/test.txt :/some/path/test.txt

8. Preservar los atributos del archivo

La opción ‘-p’ (minúscula), preservaría los tiempos de modificación, los tiempos de acceso y los modos del archivo original.

$ scp -C -p ~/test.txt :/some/path/test.txt

9. Modo silencioso

En el modo silencioso (opción ‘-q’), la salida de scp se suprimiría, y desactivaría el medidor de progreso así como los mensajes de advertencia y diagnóstico.

$ scp -vCq ~/test.txt :/some/path/test.txt

10. Especificar archivo de identidad

Cuando se utiliza la autenticación basada en clave (sin contraseña), es necesario especificar el archivo de identidad que contiene la clave privada. Esta opción se pasa directamente al comando ssh y funciona de la misma manera.

$ scp -vCq -i private_key.pem ~/test.txt :/some/path/test.txt

11. Utilice un archivo ssh_config diferente

Utilice la opción ‘-F’ para especificar un archivo ssh_config diferente.

$ scp -vC -F /home/user/my_ssh_config ~/test.txt :/some/path/test.txt

12. Utilizar un cifrado diferente

Scp utiliza por defecto el cifrado/encriptación AES. A veces puede querer usar un cifrado diferente. El uso de un cifrado diferente puede acelerar el proceso de transferencia. Por ejemplo blowfish y arcfour son conocidos por ser más rápidos que AES (pero menos seguros).

$ scp -c blowfish -C ~/local_file.txt :/remote/path/file.txt

En el ejemplo anterior utilizamos el cifrado blowfish junto con la compresión. Esto puede dar un aumento significativo de la velocidad dependiendo del ancho de banda disponible.

Resumen

Aunque scp es muy eficiente en la transferencia de archivos de forma segura, carece de las características necesarias de una herramienta de sincronización de archivos. Todo lo que puede hacer es copiar y pegar todos los archivos mencionados de una ubicación a otra.

Una herramienta más potente es Rsync, que no sólo tiene todas las funciones de scp, sino que añade más características para sincronizar inteligentemente los archivos a través de 2 hosts. Por ejemplo, puede comprobar y subir sólo los archivos modificados, ignorar los archivos existentes y así sucesivamente.