Un tutorial sencillo que le ayudará a transferir archivos a un sistema remoto desde su sistema Linux mediante el comando scp.
SCP significa 'Copia segura'. scp
es una utilidad de línea de comandos ofrecida por Linux que permite la transferencia de archivos y directorios de una máquina a otra a través de una red insegura.
Si desea copiar archivos de un sistema a otro, entonces scp
puede ser una muy buena opción para realizar una transferencia segura de los archivos y directorios. Cuando las dos máquinas que se comunican están conectadas a través de la misma red, el uso scp
es posible.
Puede confiar en gran medida en el scp
comando de confidencialidad e integridad, ya que el archivo que se está transfiriendo y la contraseña utilizada para la transferencia están encriptados. No se revelará información confidencial incluso si alguien intenta espiar el tráfico mientras esta transferencia está en curso.
En este tutorial, veremos diferentes ejemplos del scp
comando. También veremos algunas de las opciones de uso frecuente con el scp
comando.
Comenzando con el comando scp
Usando el scp
comando puede transferir archivos / directorios:
- Desde su máquina local a una máquina remota.
- Entre dos máquinas remotas.
- Desde una máquina remota a su máquina local.
Sintaxis general:
scp [Option] [source_file_name] [[email protected]_Host]:destination_folder
Entendamos los atributos básicos de este comando uno por uno.
- [source_file_name] Este es el archivo fuente que desea copiar.
- [ [email protected] _Host] Este es el nombre de usuario del sistema remoto donde desea copiar el archivo. La dirección IP de la máquina remota también se utiliza en este atributo después del
@
símbolo " ".
- [carpeta_de_destino] Este es el directorio donde desea guardar el archivo copiado.
Nota: El :
símbolo de dos puntos ( ) se utiliza en la sintaxis ya que diferencia entre las ubicaciones locales y remotas. Usamos los dos puntos ( :
) con el sistema remoto para especificar el directorio en el que se deben copiar los archivos. En caso de que no especifiquemos el directorio de destino, los archivos se copiarán al directorio de inicio del usuario del sistema remoto.
Opciones utilizadas con scp
Algunas de las opciones más populares utilizadas con el scp
comando se enumeran a continuación.
Opción |
Descripción |
-C |
permitir que se transfiera la compresión del archivo |
-v |
dar la salida detallada |
-r |
copiar archivos y directorios de forma recursiva |
-p |
preservar los permisos, modos y tiempos de acceso de los archivos |
-P |
cambiar el puerto predeterminado utilizado por el scp comando |
Opciones de uso frecuente con el comando scp
Veremos los ejemplos de estas opciones, más adelante en el tutorial.
Copiar archivo de un sistema local a uno remoto
scp
le permite transferir archivos desde su sistema local a un sistema remoto usando la siguiente sintaxis. Esto le permite transferir o cargar sus archivos a un servidor ubicado de forma remota.
Sintaxis general:
scp [file_name] [email protected]:[destination_folder]
Ejemplo:
scp apache-tomcat-9.0.8.tar.gz [email protected]:gaurav
En este ejemplo, estamos copiando un archivo 'apache-tomcat-9.0.8.tar.gz' del sistema local al sistema remoto cuya dirección IP es '143.110.178.221'.
En el sistema remoto, el archivo ahora se copiará en el directorio llamado 'gaurav'.
Producción:
[email protected]:~$ scp apache-tomcat-9.0.8.tar.gz [email protected]:gaurav
[email protected]'s password:
apache-tomcat-9.0.8.tar.gz 100% 9589KB 79.8KB/s 02:00
[email protected]:~$
Comprobemos la salida en el sistema remoto del archivo.
[email protected]:~/gaurav# ls
apache-tomcat-9.0.8.tar.gz
[email protected]:~/gaurav#
Por lo tanto, el archivo se copia correctamente en el sistema remoto mediante el scp
comando.
Copiar varios archivos a un sistema remoto
En el ejemplo anterior, aprendimos a transferir un archivo al sistema remoto usando el scp
comando. Ahora veremos el método para transferir varios archivos desde su sistema local a un sistema remoto usando este comando.
Sintaxis general:
scp [file 1] [file 2] [file n] [email protected]_host:[specific directory]
Entendamos este sencillo proceso con un ejemplo.
Ejemplo:
scp ath.html abc.txt ppa-purge_0.2.8+bzr56_all.deb [email protected]:gaurav
Aquí, se mencionan varios archivos en el comando que se copiarán en el sistema remoto.
Producción:
[email protected]:~$ scp ath.html abc.txt ppa-purge_0.2.8+bzr56_all.deb [email protected]:gaurav
[email protected]'s password:
ath.html 100% 199KB 94.7KB/s 00:02
abc.txt 100% 0 0.0KB/s 00:00
ppa-purge_0.2.8+bzr56_all.deb 100% 4360 42.2KB/s 00:00
[email protected]:~$
En el sistema remoto:
[email protected]:~/gaurav# ls -l
total 9800
-rw-r--r-- 1 root root 0 Oct 5 08:58 abc.txt
-rw-r--r-- 1 root root 9818695 Oct 5 08:35 apache-tomcat-9.0.8.tar.gz
-rw-r--r-- 1 root root 204057 Oct 5 08:58 ath.html
-rw-r--r-- 1 root root 4360 Oct 5 08:58 ppa-purge_0.2.8+bzr56_all.deb
[email protected]:~/gaurav#
Los tres archivos ahora se copian en el sistema remoto.
Copiar un directorio al sistema remoto
Puede usar el scp
comando para copiar un directorio de su sistema local al sistema remoto. El proceso es similar al de copiar un archivo. Para copiar también el contenido del directorio, puede usar la -r
opción con el scp
comando.
La -r
opción se utiliza para copiar un directorio de forma recursiva. Eso significa que también se copiarán todas las subcarpetas y archivos dentro del directorio.
Sintaxis general:
scp -r [directory path] [email protected]_host:[target_directory]
Ejemplo:
scp -r PycharmProjects [email protected]:gaurav
Producción:
[email protected]:~$ scp -r PycharmProjects [email protected]:gaurav
[email protected]'s password:
__main__.py 100% 623 7.8KB/s 00:00
__init__.py 100% 23 0.4KB/s 00:00
completion.py 100% 2929 28.1KB/s 00:00
search.py 100% 4728 38.7KB/s 00:00
uninstall.py 100% 2963 32.5KB/s 00:00
hash.py 100% 1681 21.3KB/s 00:00
check.py 100% 1430 16.8KB/s 00:00
configuration.py 100% 7125 50.4KB/s 00:00
show.py 100% 6289 49.8KB/s 00:00
download.py 100% 6623 48.2KB/s 00:00
[email protected]:~$
El uso de la -r
opción con el scp
comando copia todas las subcarpetas y archivos dentro del directorio desde la máquina local al sistema remoto.
Visualización de información detallada sobre el proceso scp
Puede utilizar la opción -v
(en minúsculas v
) para mostrar la información sobre los archivos que se están copiando en un sistema remoto o local. Este tipo de salida también se denomina salida detallada.
Cuando se utiliza esta opción, la información de depuración completa sobre el archivo se muestra en la pantalla.
Sintaxis general:
scp -v [file_name] [email protected]_host:
Ejemplo:
scp -v apache-tomcat-9.0.8.tar.gz [email protected]:team
Producción:
[email protected]:~$ scp -v apache-tomcat-9.0.8.tar.gz [email protected]:team
Executing: program /usr/bin/ssh host 159.89.170.11, user root, command scp -v -t team
OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n 7 Dec 2017
debug1: Reading configuration data /home/gaurav/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to 159.89.170.11 [159.89.170.11] port 22.
debug1: Connection established.
debug1: key_load_public: No such file or directory
debug1: identity file /home/gaurav/.ssh/id_rsa type -1
apache-tomcat-9.0.8.tar.gz 100% 9589KB 99.8KB/s 01:36
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: channel 0: free: client-session, nchannels 1
debug1: fd 0 clearing O_NONBLOCK
debug1: fd 1 clearing O_NONBLOCK
Transferred: sent 9826736, received 4016 bytes, in 97.2 seconds
Bytes per second: sent 101133.9, received 41.3
debug1: Exit status 0
[email protected]:~$
Aquí, en la salida, puede ver que la información de depuración del archivo se muestra en su terminal cuando el scp
comando se usa con la -v
opción.
Transferencia de archivos entre dos hosts remotos
Linux le permite conectarse a varios hosts remotos. Puede transferir archivos y directorios entre dos hosts remotos usando el scp
comando.
Sintaxis general:
scp [email protected]_1:/[file_name] [email protected]_2:[folder_to_save]
La sintaxis puede parecer un poco más amplia, pero es bastante simple. Aquí, la primera parte del comando proporciona la entrada sobre el usuario remoto desde donde se copiará el archivo. dos puntos (:) y /
se utiliza para especificar el nombre del archivo o el nombre del directorio que se transferirá entre las dos máquinas remotas.
La segunda parte proporciona información sobre el sistema remoto de destino donde se copiará el archivo.
Ejemplo:
scp -r [email protected]:gaurav [email protected]:/team
Aquí, copiaremos un directorio llamado 'gaurav' de forma recursiva desde el sistema local a un sistema remoto. El archivo se copiará a una carpeta 'equipo' en el sistema remoto.
Producción:
[email protected]:~$ scp -r [email protected]:/gaurav [email protected]:/team
[email protected]'s password:
1.py 100% 134 261.3KB/s 00:00
variables.py 100% 377 949.2KB/s 00:00
abc.txt 100% 0 0.0KB/s 00:00
ath.html 100% 199KB 41.8MB/s 00:00
[email protected]:~$
Aquí, usamos el scp
comando en el sistema local para transferir un directorio llamado 'gaurav' de un servidor remoto a otro.
Transfiera archivos desde el sistema remoto a su sistema local
Puede transferir fácilmente los archivos o directorios desde el sistema remoto a su sistema local usando el scp
comando. En palabras más simples, puede descargar múltiples archivos o directorios desde el servidor remoto a su sistema local usando el scp
comando.
Sintaxis general:
scp [email protected]_host:/files/file.txt /[folder_of_local_system]
Producción:
[email protected]:~$ scp [email protected]:how.txt .
[email protected]'s password:
how.txt 100% 11 0.1KB/s 00:00
[email protected]:~$
Aquí, he descargado (copiado) el archivo del servidor remoto a mi directorio personal. Por lo tanto, he usado dot ( .
) para especificar en el comando para copiar el archivo a mi directorio de inicio.
Salida de muestra:
[email protected]:~$ ls -l how.txt
-rw-r--r-- 1 gaurav gaurav 11 Oct 6 09:49 how.txt
[email protected]:~$
Aquí, el archivo ahora se copia a mi directorio de inicio desde el servidor remoto.
De la misma manera, puede descargar múltiples archivos o directorios desde el servidor remoto usando el scp
comando con las opciones apropiadas.
Comprimir archivos para hacer transferencias más rápidas
A veces, la transferencia de archivos grandes puede llevar mucho tiempo. Este problema se puede solucionar mientras se usa el scp
comando con la opción -C
(mayúsculas C
).
Usando la -C
opción, comprime los archivos de mayor tamaño, lo que facilita una transferencia más rápida y, por lo tanto, ahorra tiempo.
Un hecho interesante sobre esta opción es que el archivo se copia con su tamaño original en el sistema de destino, pero durante el proceso de transferencia, el tamaño se comprime para permitir una transferencia más rápida. Por lo tanto, la compresión solo se realiza en la red.
Sintaxis general:
scp -C [file_name] [email protected]_host:[target_folder]
Veamos un ejemplo comparativo para entender la diferencia.
Transferencia sin opción -C:
[email protected]:~$ scp -rv dlink [email protected]:team
Executing: program /usr/bin/ssh host 68.183.82.183, user root, command scp -v -r -t team
OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n 7 Dec 2017
debug1: Reading configuration data /home/trinity/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to 68.183.82.183 [68.183.82.183] port 22.
debug1: Connection established.
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: channel 0: free: client-session, nchannels 1
debug1: fd 0 clearing O_NONBLOCK
debug1: fd 1 clearing O_NONBLOCK
Transferred: sent 7516504, received 4008 bytes, in 74.6 seconds
Bytes per second: sent 100693.7, received 53.7
debug1: Exit status 0
[email protected]:~$
De la salida anterior podemos ver que el tiempo requerido para la transferencia es de 74,6 segundos. Intentaremos transferir el mismo archivo usando la opción -C y observaremos la diferencia.
Transferir con opción -C:
[email protected]:~$ scp -Crv dlink [email protected]:team
Executing: program /usr/bin/ssh host 68.183.82.183, user root, command scp -v -r -t team
OpenSSH_7.6p1 Ubuntu-4ubuntu0.3, OpenSSL 1.0.2n 7 Dec 2017
debug1: Reading configuration data /home/trinity/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug1: Connecting to 68.183.82.183 [68.183.82.183] port 22.
debug1: Connection established.
.
.
webupload.img 100% 1834KB 98.7KB/s 00:18
Sending file modes: C0664 1877552 router.img
Sink: C0664 1877552 router.img
router.img 100% 1834KB 100.3KB/s 00:18
Sink: E
Sending file modes: C0664 3754103 DSL-2750U-Release-IN-T-01.00.07.zip
Sink: C0664 3754103 DSL-2750U-Release-IN-T-01.00.07.zip
DSL-2750U-Release-IN-T-01.00.07.zip 100% 3666KB 218.5KB/s 00:16
Sink: E
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
debug1: channel 0: free: client-session, nchannels 1
debug1: fd 0 clearing O_NONBLOCK
debug1: fd 1 clearing O_NONBLOCK
Transferred: sent 7518864, received 3828 bytes, in 51.0 seconds
Bytes per second: sent 100245.4, received 51.0
debug1: Exit status 0
debug1: compress outgoing: raw data 7511925, compressed 7513136, factor 1.00
debug1: compress incoming: raw data 1467, compressed 999, factor 0.68
[email protected]:~$
Aquí, podemos observar fácilmente que usar la -C
opción con el scp
comando nos ha permitido comprimir el archivo a través de la red, demostrando así ser una opción que ahorra tiempo.
Usando un puerto ssh diferente para la transferencia de archivos
Mientras usa el scp
comando, el puerto predeterminado que se implementa es el port 22
. El usuario tiene la libertad de personalizar esta opción de puerto. Puede usar la -P
(opción P mayúscula) con el scp
comando para usar el puerto de su elección.
Sintaxis general:
cp -P [new_port_number] [file_name/directory_name] [email protected]:[destination_folder]
Ejemplo:
scp -P 4248 dlink [email protected]:team
Usando el comando anterior, el archivo se transferirá al servidor remoto. Pero esta vez, el puerto utilizado será en port 4248
lugar del predeterminado port 22
.
Conclusión
Después de seguir este tutorial, hemos aprendido sobre la naturaleza dinámica del scp
comando utilizado para transferir o copiar archivos de un sistema a otro. Esta opción también se puede utilizar para descargar archivos o directorios desde el servidor remoto. Por lo tanto, podemos concluir que el scp
comando resulta muy útil para la transferencia de archivos cuando tiene que manejar más de un sistema y servidores remotos simultáneamente.