
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,
- usuario1 @ fuente_A: dir1 / archivo1 – Archivo fuente / dir.
- usuario2 @ destino_B: dir2 / archivo2 – Archivo / directorio de destino.
- : – 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








