Tutoriales

Cómo copiar y transferir archivos de forma remota en Linux usando scp / rsync

In Linux, ¿cómo copio y transfiero archivos de forma remota entre dos computadoras Linux? ¿Qué comando necesito para transferir archivos de forma segura entre computadoras Unix / macOS y Linux?

En sistemas Linux y similares a Unix, debe usar el comando scp o el comando rsync para copiar de forma segura archivos y directorios entre máquinas remotas. Esta página explica cómo usar el comando scp / rsync para copiar y transferir archivos de forma segura.

Detalles de las instrucciones
Nivel de dificultad Fácil
Derechos de root No
requisito scp y rsync
Horario de verano europeo. Tiempo de leer 6 minutos

Comandos para copiar y transferir archivos de forma remota en Linux

El comando scp usa el protocolo SSH para transferir archivos. Por lo tanto, sería mejor si tiene una contraseña o frase de contraseña o clave SSH para la autenticación. Tanto scp como rsync cifran el archivo y todas las contraseñas intercambiadas. En otras palabras, nadie puede husmear en la red para ver sus datos o archivos.

Cómo utilizar el comando scp para transferir archivos de forma segura al host remoto

La sintaxis es la siguiente:

scp filename username@destination-remote-host:/path/to/dir
scp /path/to/file username@destination-remote-host:/path/to/dir/file
scp [options /path/to/file username@destination-remote-host:/path/to/dir/file
scp [options] user1@source_A:dir1/file1 user2@destination_B:dir2/file2

Dónde,

  1. usuario1 @ fuente_A: dir1 / archivo1 – Archivo fuente / dir.
  2. usuario2 @ destino_B: dir2 / archivo2 – Archivo / directorio de destino.
  3. : – Los dos puntos (:) juegan un papel importante y scp los usa para distinguir entre ubicaciones locales y remotas. ¿Le importaría agregar un espacio entre los archivos de origen y destino?

No te preocupes. Es fácil. Veamos algunos ejemplos comunes.

Cómo copiar un archivo local a un sistema remoto usando el comando scp

Cómo copiar un archivo llamado log.txt desde su directorio actual en el escritorio de Linux o macOS a un directorio llamado ~ / Datos ($ HOME / datos o / inicio / vivek / data) En su cuenta en el sistema remoto llamado nas04 (IP 192.168.2.17) ingrese:

scp log.txt vivek@nas04:~/data/
 
## OR use full path ##
scp log.txt vivek@nas04:/home/vivek/data/
 
## OR use the IP address ##
scp log.txt vivek@192.168.2.17:~/data/

Asumo que tu nombre de usuario es usuario vivek, y el directorio llamado / inicio / vivek / data / ya deja el nas04 Servidor para los ejemplos anteriores. Puede verificarlo con el siguiente comando simple:
ssh 192.168.2.17 -- ls -l ~/data/
Eso es todo, y así es como se ve en mi terminal:

Cómo usar el comando scp para transferir archivos de forma segura desde el escritorio de Linux al servidor FreeBSD remoto

Tenga en cuenta que es posible que se muestre una solicitud de contraseña en el sistema de destino. El comando scp solo funcionará si ingresa la contraseña correcta o la frase de contraseña de la clave SSH. Copiemos un archivo local llamado web-app-confing.py a un servidor remoto 1.2.3.4 alojado en Linode como usuario de vivek:

scp web-app-confing.py vivek@1.2.3.4:/path/to/my/app/dir/

Copiar un archivo remoto a un sistema local usando el comando scp

Suponiendo que necesita copiar un archivo desde un servidor remoto alojado en Linode o AWS, la sintaxis es:

scp ec2-user@public-ip-address:/path/to/file /path/to/dest/dir/

Por ejemplo, copie un archivo llamado /var/www/html/config.php Desde un servidor remoto con IP 1.2.3.4 ejecute el siguiente comando:

scp ec2-user@1.2.3.4:/var/www/html/config.php ~/projects/

Copie de forma recursiva directorios completos entre dos hosts

Para copiar un directorio y todos los archivos que contiene, utilice el comando scp con el -R Posibilidad de la siguiente manera:

scp -r ~/projects/python/ backup@192.168.2.17:/backups/desktop/python/

El comando anterior copia todo el ~ / proyectos / python Directorio de su cuenta a la dirección IP de su cuenta de servidor de respaldo 192.168.2.17. Di que borraste alguna vez ~ / proyectos / python en su escritorio macOS o Linux. ¿Podemos copiar todos los archivos del servidor de respaldo? Sí, ese es todo el punto, y la sintaxis se invierte de la siguiente manera:

scp -r vivek@192.168.2.17:~/projects/python/ ~/python

Utilice marcadores de posición para copiar varios archivos

Puede utilizar comodines para copiar varios archivos dentro de un directorio. Por ejemplo, para copiar todos los archivos ‘.pl’ (Python) del directorio appA de su cuenta del servidor EC2, ingrese:

scp -r ~/appA/*.pl ec2-user@1.2.3.4:~/appA/
 
# Grab all Perl files from remote server to the local dir 
scp ec2-user@1.2.3.4:"appB/*.pl" ~/appB/

Cómo copiar un archivo entre dos servidores remotos Linux o Unix con el comando scp

Para el siguiente ejemplo, suponga que un usuario de vivek está conectado a otro sistema Linux o macOS, digamos macBookAir $. Copiar ahora auth.py desde su directorio personal Caja1 para usted / app / auth / Directorio Caja2, Ingresar:

macBookAir$ scp vivek@Box1:~/auth.py vivek@box2:/app/auth/

Tenga en cuenta que se le pedirá que ingrese dos contraseñas. Uno para el sistema fuente llamado Caja1 y uno para el sistema de destino llamado Caja2. El comando solo funcionará si ingresa ambas contraseñas o la frase de contraseña de la clave SSH correctamente. También puede especificar el puerto ssh o hacer una copia recursiva también:

macBookAir$ scp -P 4242 vivek@Box1:~/auth.py vivek@box2:/app/auth/
macBookAir$ scp -P 4242 -r vivek@Box1:~/app1/ vivek@box2:~/app1/

Manejo del puerto SSH

Suponiendo que el host remoto está escuchando en un puerto diferente al puerto # 22 SSH TCP estándar, entonces debe especificar el puerto para la conexión en el host remoto de la siguiente manera -P número_puerto_aquí Oportunidad:

# Upload file using remote HOST ssh TCP port # 2222
scp -P 2222 filename.txt user@1.2.3.4:/path/to/dest/
 
# Download file using remote HOST ssh port # 4242
scp -P 4242 vivek@ls.www-db-1:~/projects/cluster.ini .
 
# Recursive copy with SSH port 
scp -r -P 4242 mysqlbackup@ls.www-db-1:/etc/mysql/ ~/mysql/

¿Qué es rsync?

Rsync es una utilidad de línea de comandos que permite una rápida transferencia incremental de archivos en Linux y Unix. Además, debido a las opciones avanzadas, Rsync recomienda cuando tiene muchos archivos para transferir. Además, el protocolo scp es obsoleto después de OpenSSH y es inflexible y no fácil de reparar. Por lo tanto, recomiendan utilizar protocolos más modernos como sftp y rsync para la transferencia de archivos.

Cómo usar rsync para copiar y transferir archivos de forma remota en Linux y Unix

El comando rsync tiene muchas opciones, pero el uso más típico es:

rsync -av --delete /source/path username@hostname:/destination/path/
rsync -av --delete username@hostname:/source/path/ /destination/path

En este ejemplo a continuación, estoy copiando / source / dir / a / target / dir:

rsync -avP /source/dir /target/dir/

Ahora podemos hacer la transferencia de archivos a través de la red de la siguiente manera:

rsync -avP /source/dir user@Box2:/target/dir/
rsync -avP ~/projects/ vivek@server2:~/projects/

Necesitamos prefijar el directorio de destino con el nombre de la computadora remota para copiar archivos. Nuevamente, se le pedirá su contraseña SSH o la frase de contraseña de la clave SSH en el host remoto antes de que comience el proceso de copia. El siguiente comando sincroniza el directorio app1 desde el escritorio a ~ vivek / data / app1 (/ home / vivek / data / app1 dir) en el servidor ec2:

rsync -av --delete ~/app1 vivek@ec2-server:data

El siguiente comando sincroniza el directorio ~ vivek / appB (/ home / vivek / appB) en serverC con ./appB en el escritorio Linux local en el directorio actual:

rsync -av --delete vivek@serverC:appB ~/appB

Las opciones del comando rsync son las siguientes:

  • -en : Modo de archivo (copia todos los subdirectorios y archivos de forma recursiva y conserva tantos atributos de archivo como sea posible)
  • -v : Modo detallado (muestra los nombres de los archivos cuando se copian)
  • -PAG : Mostrar barra de progreso
  • --Claro : Pídale a rsync que elimine los archivos superfluos del lado receptor (aquellos que no están en el lado emisor), pero solo para los directorios que se están sincronizando.

Consulte la documentación del comando rsync para obtener más información.

Resumir

Ha aprendido a utilizar scp o rsync para transferir archivos de forma segura entre dos sistemas Linux o Unix. Lea las siguientes páginas de manual con el comando man:
man scp
man rsync
man ssh



Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba