SCP es la he­rra­mie­n­ta clásica de Linux y los sistemas ope­ra­ti­vos co­m­pa­ti­bles con POSIX que permite copiar archivos cifrados entre sistemas dentro de una misma red. La abre­via­tu­ra SCP significa Secure Copy (copia segura) donde Secure (seguro) hace re­fe­re­n­cia al cifrado utilizado para la tra­n­s­fe­re­n­cia de datos. El nombre del protocolo SCP deriva de las dos te­c­no­lo­gías me­n­cio­na­das a co­n­ti­nua­ción:

  • el protocolo SSH (Secure Shell), que permite el acceso cifrado a los sistemas remotos;
  • la he­rra­mie­n­ta RCP (Remote Copy), que copia archivos de forma insegura, es decir, sin cifrar, en la red.

EL comando SCP es un software que se ejecuta en el sistema local y en el servidor. Actúa como daemon y como cliente del protocolo SCP. Dado que SCP forma parte de la am­plia­me­n­te utilizada di­s­tri­bu­ción OpenSSH, está di­s­po­ni­ble en prá­c­ti­ca­me­n­te todos los sistemas. Como es habitual en Linux, el comando SCP se introduce en la línea de comandos.

Uno de los mayores in­co­n­ve­nie­n­tes del protocolo SCP es que el software ha crecido de forma orgánica. No está es­ta­n­da­ri­za­do ni consta de un documento RFC que lo describa ni nada similar. En cambio, solo tiene, como parte del proyecto OpenSSH, una re­fe­re­n­cia de im­ple­me­n­ta­ción. Hoy en día existen al­te­r­na­ti­vas más modernas a SCP que se suelen usar para la mayoría de los casos.

Fu­n­cio­na­li­dad y uso del comando SCP de Linux

La fu­n­cio­na­li­dad del comando SCP es análoga a la del antiguo comando RCP. Al igual que con RCP, la sintaxis del comando SCP en la línea de comandos sigue la del comando CP, el cual se utiliza para copiar archivos en el sistema local. Dado que SCP se basa en el protocolo SSH, se comunica con la red a través del puerto TCP 22. A co­n­ti­nua­ción tienes un resumen de los comandos para copiar archivos más comunes de Linux:

Comando de copia Nombre Fu­n­cio­na­li­dad Acceso remoto
cp Copy Copia, solo local -
rcp Remote Copy Copia local-remota, remota-remota RSH
scp Secure Copy Copia segura local-remota, remota-remota SSH
sftp Secure File Transfer Protocol Copia segura local- remota, remota- remota; ma­ni­pu­la­ción de sistemas de archivos remotos SSH
rsync Remote Sync Copia segura local, local-remota, remota- remota; si­n­cro­ni­za­ción SSH, Stunnel

El comando SCP permite tanto copiar un archivo a un servidor como de­s­ca­r­gar­lo de él. El protocolo solo permite el flujo de datos en sentido uni­di­re­c­cio­nal, lo que significa que por cada conexión solo se puede copiar en un sentido. Adi­cio­na­l­me­n­te, con SCP se pueden copiar archivos entre dos sistemas de la misma red. El comando SCP ofrece la opción de que, al realizar la copia, también se tra­n­s­fie­ran los atributos del archivo de origen al del destino.

Flujo de datos al copiar entre dos sistemas remotos

Si quieres copiar un archivo entre dos sistemas remotos empleando el comando SCP de Linux, hay algunos detalles que debes de tener en cuenta. SCP utiliza el protocolo SSH para es­ta­ble­cer co­ne­xio­nes cifradas. El acceso a un sistema remoto con SSH se hace mediante usuario y co­n­tra­se­ña o con una clave SSH (par de claves pública/privada). Por lo general, el método privado es pre­fe­ri­ble al público.

En la variante original, en la que se utiliza SCP para tra­n­s­fe­rir un archivo de un sistema remoto (host) a otro host, se sigue este proceso:

  1. El usuario ordena a la he­rra­mie­n­ta SCP de su sistema local que tra­n­s­fie­ra un archivo ubicado en el host 1 al host 2.
  2. El programa SCP en el sistema local del usuario abre una conexión SSH con el host 1 y ejecuta el programa SCP ubicado allí.
  3. El programa SCP en el host 1 abre una conexión SSH con el host 2 y tra­n­s­fie­re el archivo guardado en el host 1 al host 2 como si fuera un archivo local.

Para que funcione este proceso, se necesita que llegue una clave SSH pública al host 2 por parte del host 1. Sin embargo, en este caso, el host 1 tiene un acceso pe­r­ma­ne­n­te al host 2 sin que el usuario haga nada, esto supone un riesgo a la seguridad. Por lo que existe una variante más moderna:

  1. El usuario ordena a la he­rra­mie­n­ta SCP de su sistema local que tra­n­s­fie­ra un archivo ubicado en el host 1 al host 2.
  2. El programa SCP en el sistema local del usuario abre una conexión SSH con el host 1 y el host 2 si­mu­l­tá­nea­me­n­te.
  3. El archivo se dirige desde el host 1 a través del sistema local y se tra­n­s­fie­re al host 2.

En este caso, las claves SSH públicas del usuario deben al­ma­ce­nar­se tanto en el host 1 como en el host 2. De todos modos, este ya debería ser el caso en la mayoría de los casos como, por ejemplo, cuando el usuario es un ad­mi­ni­s­tra­dor, que tiene acceso a ambos hosts.

Sintaxis del comando SCP de Linux

La sintaxis de un comando define cómo debe de in­tro­du­ci­r­se en la línea de comandos para que se ejecute co­rre­c­ta­me­n­te. Aquí te mostramos de manera es­que­má­ti­ca cómo es la sintaxis del comando SCP. El formato básico para usar el comando SCP se basa en la sintaxis del comando CP, que se utiliza para copiar archivos en el sistema local: el archivo en la ruta de origen se copia en la ruta de destino. Hay varios pa­rá­me­tros que puedes ponerle a la ruta de origen según tus ne­ce­si­da­des:

scp <parámetro> <ruta de origen> <ruta de destino>

Para copiar archivos a, desde o entre sistemas remotos, la ruta de origen o de destino, o ambas, se su­s­ti­tu­yen por una es­pe­ci­fi­ca­ción de ruta más compleja. Dicha es­pe­ci­fi­ca­ción de ruta contiene el nombre de la red con la dirección de IP del host y el nombre de usuario que quiere acceder al host:

<usuario>@<host>:<directorio/archivo.extensión>

A co­n­ti­nua­ción, re­pre­se­n­ta­re­mos el término ‘<usuario>@<host>’ como ‘usuario@example.com’ (para el host 1) al igual que ‘usuario@www.example.com’ (para el host 2).

Opciones del comando SCP de Linux

El fu­n­cio­na­mie­n­to del comando SCP se controla mediante varios pa­rá­me­tros, como es habitual con las he­rra­mie­n­tas de línea de comandos. Aquí tienes una selección de los pa­rá­me­tros más útiles:

Option Bedeutung Kommentar
-C Usar la co­m­pre­sión (co­m­pre­s­sion) No confundir con el parámetro ‘-c’ (cipher), que activa el pro­ce­di­mie­n­to de cifrado
-p Tra­n­s­fe­rir los atributos de archivo al archivo de destino (pe­r­mi­s­sio­ns) No confundir con el parámetro ‘-P’, que activa el puerto de red
-r Copiar los di­re­c­to­rios de manera iterativa (recursive) -
-v Mostrar la versión ampliada (verbose) -
-q Eliminar la salida (quiet) -
-3 Enviar los datos a través del sistema local (third party) -
Consejo

Para una de­s­cri­p­ción detallada de todos los pa­rá­me­tros di­s­po­ni­bles, entra en la página manual del comando SCP.

Ejemplos de uso del comando SCP de Linux

El comando SCP se puede utilizar de muchas maneras y se puede combinar con los patrones ha­bi­tua­les de la línea de comandos para es­pe­ci­fi­car archivos y di­re­c­to­rios. Dada la amplitud de los posibles es­ce­na­rios de uso, aquí solo pre­se­n­ta­mos algunos casos típicos. Ten en cuenta que hoy en día se prefieren otras he­rra­mie­n­tas distintas al comando SCP para copiar archivos en la red.

Copiar un archivo del sistema local al remoto

Para copiar un archivo ‘archivo.txt’ desde el di­re­c­to­rio actual del sistema local al host ‘example.com’, uti­li­za­mos la siguiente llamada SCP. Ten en cuenta que aquí simulamos que, siendo el usuario llamado ‘usuario’, tenemos acceso al host ‘example.com’.

scp archivo.txt usuario@example.com:/ruta/al/directorio

Una vez hemos realizado la copia con éxito, el archivo ‘archivo.txt’ se encuentra en el di­re­c­to­rio ‘/ruta/al/archivo del host’.

Copiar un archivo del sistema remoto al local

Para invertir el sentido de la operación de copia, basta con in­te­r­ca­m­biar las rutas local y remota. En el primer ejemplo, uti­li­za­mos el punto ‘.’ para definir el di­re­c­to­rio actual como destino:

scp usuario@example.com:/ruta/al/directorio/archivo.txt .

Aquí mostramos una variante del primer ejemplo donde copiamos el archivo a la carpeta ‘Desktop’ del ordenador del usuario, si­m­bo­li­za­da por la vi­r­gu­li­lla ‘~’. Ten en cuenta que utilizar la vi­r­gu­li­lla indica que está en la carpeta local del usuario. Para evitar errores, una ruta con vi­r­gu­li­lla debe ir entre comillas:

scp usuario@example.com:/ruta/al/directorio/archivo.txt "~/Desktop/"

Si quieres copiar el archivo y guardarlo con otro nombre, es­pe­ci­fi­ca el nuevo nombre al final de la ruta de destino:

scp usuario@example.com:/ruta/al/directorio/archivo.txt "~/Desktop/archivo.bak"

Copiar varios archivos

Si estás fa­mi­lia­ri­za­do con el uso del comando CP, puede que ya sospeches que también podemos copiar varios archivos con el comando SCP. La forma más fácil de hacerlo es enumerar los archivos uno por uno. En el siguiente ejemplo, todos los archivos se­le­c­cio­na­dos se en­cue­n­tran en el di­re­c­to­rio actual, por lo que nos ahorramos tener que in­tro­du­cir la ruta de cada uno de los archivos:

scp archivo-1.txt archivo-2.txt usuario@example.com:/ruta/al/directorio

Ten cuidado al utilizar “wildcards” y “globs” como ‘?’ y ‘*’. Aunque son cómodos, porque permiten in­tro­du­cir los nombres de archivos de forma más compacta, pueden llevar a errores ine­s­pe­ra­dos cuando se usan en la ruta del host. En estos casos, es mejor utilizar un bucle, como te mostramos en el ejemplo “Tra­n­s­fe­rir archivos a un sistema remoto”, o recurrir a una he­rra­mie­n­ta al­te­r­na­ti­va.

Copiar un di­re­c­to­rio completo

Como es habitual con el comando CP, se puede copiar un di­re­c­to­rio entero de forma iterativa. Para ello, in­tro­du­ci­mos el parámetro ‘-r’ antes de la ruta de origen.

scp -r directorio de usuario@example.com:/ruta/al/directorio

Después de que se produzca la copia con éxito, todos los archivos y su­b­di­re­c­to­rios ubicados en el di­re­c­to­rio ‘di­re­c­to­rio’ tendrán una copia exacta en el host bajo la ruta ‘/ruta/al/di­re­c­to­rio’.

Para tra­n­s­fe­rir archivos de mayor peso, conviene in­tro­du­cir el parámetro “-C”, que comprime los archivos para tra­n­s­fe­ri­r­los:

scp -C -r directorio usuario@example.com:/ruta/al/directorio
Nota

Ten en cuenta que SCP siempre tra­n­s­fie­re todos los archivos de manera íntegra. Si la tra­n­s­fe­re­n­cia se in­te­rru­m­pe, hay que volver a empezar. Para copiar di­re­c­to­rios de mayor peso o si tienes una conexión de inestable, es mejor utilizar otra he­rra­mie­n­ta diferente.

Copiar un archivo entre dos sistemas remotos

Para copiar un archivo entre dos hosts, uti­li­za­mos el comando SCP sin indicar una ruta de acceso local. Las rutas de origen y destino deben contener los datos del usuario y del host:

scp usuario@example.com:/ruta/al/otro/directorio/archivo.txt usuario@www.example.com:/ruta/al/otro/directorio/archivo

Como me­n­cio­na­mos al principio, a menudo conviene realizar la tra­n­s­fe­re­n­cia a través de tu propio sistema. Para ello, uti­li­za­mos el parámetro “-3”, que se pone delante de la ruta de origen:

scp -3 usuario@example.com:/ruta/al/directorio/archivo.txt usuario@www.example.com:/ruta/al/directorio/archivo

Tra­n­s­fe­rir archivos a un sistema remoto

Usar el comando SCP para tra­n­s­fe­rir archivos locales a un host es un poco más complejo. Esto puede ser necesario, por ejemplo, para crear una copia de seguridad remota de archivos que ya no se necesiten lo­ca­l­me­n­te. A di­fe­re­n­cia de la di­s­ti­n­ción que se hace entre los comandos locales ‘cp’ (“copy”, copiar) y ‘mv’ (“move”, mover), el comando SCP no ofrece un parámetro in­de­pe­n­die­n­te para mover un archivo. Sin embargo, podemos hacerlo nosotros mismos con métodos co­n­ve­n­cio­na­les.

En primer lugar, veamos la operación de tra­n­s­fe­re­n­cia, se compone de una operación de copia seguida de una operación de borrado. Im­ple­me­n­ta­mos esta secuencia de ope­ra­cio­nes en la línea de comandos co­m­bi­na­n­do los comandos ‘scp’ y ‘rm’, este último utilizado para borrar un archivo. Co­n­ca­te­na­mos los comandos con el operador lógico AND ‘&&’, de modo que el segundo comando se ejecuta solo si el primero tiene éxito. Así, nos ase­gu­ra­mos de que la copia en el host se ha creado antes de que se elimine la versión original en local.

Por último, uti­li­za­mos un bucle ‘for’ para procesar todos los archivos que se en­cue­n­tran en el di­re­c­to­rio actual. También tenemos la opción de in­tro­du­cir un parámetro para incluir solo ciertos archivos o tipos de archivos. Como queremos crear una copia de seguridad exacta de cada archivo, uti­li­za­mos el parámetro ‘-p’ para copiar también los atributos de cada archivo. Dado que crear una copia de seguridad es un proceso sensible, in­tro­du­ci­mos también el parámetro ‘-v’ que hace que el comando SCP muestre in­fo­r­ma­ción adicional sobre el estado de la copia de seguridad.

for archivo in ./patrón*.extensión ; do scp -p -v "$archivo" usuario@example.com:"/backup/${archivo}. bak" && rm "$archivo" ; done

Al­te­r­na­ti­vas al comando SCP de Linux

Aunque SCP esté di­s­po­ni­ble en casi todos los sistemas, hace tiempo que dejó de ser el método preferido para copiar archivos en la red. Lo dicen incluso los de­sa­rro­lla­do­res del proyecto SSH, que su proyecto incluye la he­rra­mie­n­ta SCP.

Los de­sa­rro­lla­do­res de SCP ofrecen algunas al­te­r­na­ti­vas como SFTP (Secure File Transfer Protocol) y Rsync (Remote Sync) que también utilizan SSH para el acceso cifrado al host remoto. Ambos programas ofrecen mayores pre­s­ta­cio­nes y están en continuo de­sa­rro­llo. El único in­co­n­ve­nie­n­te im­po­r­ta­n­te de estas he­rra­mie­n­tas es que es necesario in­s­ta­lar­las primero, mientras que SCP viene prei­n­s­ta­la­do en casi todos los sistemas. Veamos con más detalle las dos al­te­r­na­ti­vas.

SFTP es más o menos el sucesor directo de SCP. La tra­n­s­fe­re­n­cia de datos está protegida por el cifrado y utiliza la in­frae­s­tru­c­tu­ra SSH existente. En la práctica, esto significa que SFTP puede uti­li­zar­se para acceder desde el sistema local a los sistemas de archivos remotos de los hosts para los que el sistema local tenga acceso SSH. El protocolo SFTP pro­po­r­cio­na mejores pre­s­ta­cio­nes que las del protocolo SCP. SFTP comprueba au­to­má­ti­ca­me­n­te que los datos tra­n­s­fe­ri­dos son correctos y también permite retomar las tra­n­s­fe­re­n­cias in­te­rru­m­pi­das.

Rsync es otra potente he­rra­mie­n­ta capaz de realizar las mismas tareas que SCP. Sin embargo, Rsync no es un comando de copia como tal. La he­rra­mie­n­ta puede hacer mucho más y está es­pe­cia­l­me­n­te diseñada para la tra­n­s­fe­re­n­cia eficiente de grandes archivos y ca­n­ti­da­des de datos. Para ello, Rsync compara los archivos de la ruta de destino con los de la ruta de origen y tra­n­s­fie­re úni­ca­me­n­te la di­fe­re­n­cia. No es necesario empezar desde el principio si se in­te­rru­m­pe una tra­n­s­fe­re­n­cia, aunque se reinicie el sistema.

En resumen

Si dispones de las he­rra­mie­n­tas SFTP o Rsync, deberías usarlas para copiar archivos en la red antes de recurrir a la he­rra­mie­n­ta SCP.

Ir al menú principal