Tabla de contenido
¡Hola! Hoy traigo varias formas de transferir ficheros desde un sistema con red hacia otro sistema. Es decir, como sacar ficheros de un sistema.
Hay muchas formas de hacerlo. Algunas de ellas con cifrado y otras en plano. Lógicamente las que no usan cifrado son mas rápidas pero solo deben usarse en redes privadas y con datos que no sean críticos (para evitar robo de datos).
1. Rsync de un sistema completo
Rsync es un software que utiliza SSH para transferir ficheros. Al funcionar sobre SSH, este le aporta la capa de cifrado.
Esta utilidad tiene la capacidad de (como dice el nombre), sincronizar ficheros. Detecta cambios en los ficheros y copia a destino los ficheros que han sido modificados.
Se pueden incluir varias opciones: Respetar permisos(-p), respetar owner (-o), respetar grupo (-g), recursivo (-r), mostrar progreso (–progress).
La forma de replicar un sistema completo a otro sistema es ejecutar:
# rsync -avr --exclude={"/dev/*", "/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found","/boot/grub"} /* root@DESTINO:/ --progress
En esta linea excluye todos los directorios temporales que darán problemas, si lo que se quiere es duplicar la maquina para dejarla operativa en otra ubicación, es necesario excluir los ficheros de configuración de red.
También se puede ejecutar la linea anterior para crear un contenedor o un backup si en vez de copiarlo a «root@DESTINO:/» lo copiamos a «root@DESTINO:/DIRECTORIO»
Si solo se require transferir una vez los ficheros y no se dispone de rsync en origen y destino, se puede usar SFT que funciona de forma paracida, con la excepción de que no hace sincronización de cambios, transfiere todos los ficheros.
2. DD + SSH
Como hemos comentado antes, la forma más versatil de cifrar transferencias es con la capa que ofrece SSH.
Con la forma de transferencia que veremos a continuación realizamos una copia bit a bit de un fichero y lo enviamos mediante SSH. Esta opción es muy buena para enviar ficheros a otro host, por ejemplo a la hora de migrar un disco duro de una maquina virtual.
La forma de utilizarlo es:
dd if=ORIGEN bs=128k |pv |ssh root@DESTINO "dd of=DESTINO_PATH bs=16k"
También se puede añadir gzip a la transferencia para recortar el tiempo de transferencia:
dd if=ORIGEN bs=128k |pv|gzip |ssh root@DESTINO "gunzip|dd of=DESTINO_PATH bs=16k"
EL comando «pv» nos reporta el flujo de datos que se transfiere entre pipes, por lo que así sabriamos el proceso. En las nuevas versiones de «dd» ya incluye una opción para mostrar el proceso: «status=progress»
Este sería el aspecto con «pv»
Y este el aspecto con «status=progress»
3. SSHFS
Este software es capaz de montar por red una ruta remota mediante SSH, como en las anteriores, SSH nos aporta la capa de cifrado. Lo hace de forma parecida a NFS.
La forma de hacerlo es la siguiente:
sshfs root@HOST:/RUTA_REMOTA /PUNTO_DE_MONTAJE
Una vez montado se pueden copiar ficheros y directorios desde/hacia el punto de montaje.
Si se quiere hacer un montaje permanente de ese punto de montaje, una de las opciones (y la mas indicada), es incluirlo en el fstab. Para ello, solo hay que añadir una linea:
root@HOST:/PATH_DESTINO PUNTO-DE-MONTAJE fuse.sshfs rw,nonempty
Quedaría así:
4. SimpleHTTPServer
Cuando necesitamos rapidez, y estamos en la misma red o la maquina de la que quieren sacarse los ficheros tiene una IP pública, la opción mas rápida es esta. Lo que hace es montar un servidor http básico en el puerto que le especifiquemos, en el path actual (ejecutar «pwd» para ver si estamos en el directorio requerido).
La forma de ejecutarlo sería:
cd DIRECTORIO-DONDE-ESTÁN-LOS-FICHEROS && python -m SimpleHTTPServer PUERTO
Por ejemplo:
Después se podría acceder por la IP con un navegador:
Como se puede ver, mediante el navegador se ve lo mismo que con «ls -al«:
5. Netcat
La forma mas tradicional de transferir ficheros en texto plano, es netcat:
Por un lado hay que ejecutar en la maquina donde queremos dejar el fichero:
nc -l -p PUERTO > FICHERO
Y en la maquina de origen
nc -w 3 HOST_DESTINO PUERTO < FICHERO_A_COPIAR
En este caso no vemos que no hay reporte de transferencia, esto se puede solucionar con PV:
En la maquina de destino ejecutamos:
nc -w 3 HOST_DESTINO PUERTO |pv -b < FICHERO_A_COPIAR
Como veis, de esta forma se transfiere únicamente un fichero, por lo que si se quiere transferir un directorio, lo mejor es crear un fichero tar y transferirlo.
Esto ha sido todo por ahora. Espero que os haya gustado, si ha sido así, por favor, comparte el articulo en tus redes sociales.
¡Nos vemos!