La mejor manera de transferir archivos a través de una LAN entre dos computadoras Linux

La mejor manera de transferir archivos a través de una LAN entre dos computadoras Linux

Quiero transferir archivos (una carpeta de música) entre dos computadoras con Linux. Después de buscar la mejor manera de hacer esto, he visto que haylotesde maneras de hacer esto. Sé que esto se ha preguntadomucho,en todos ladosytodo el tiempo. El principal problema con esto es que no existe un consenso reciente y claro sobre la mejor manera de realizar esta tarea en 2011 para los principiantes de Linux (incluso dependiendo de algunos parámetros).

Entonces, en el espíritu de los sitios web de Stack Exchange, quiero que esto no esté relacionado con mi situación particular, sino más bien como una guía para otros sobre cómo transferir archivos entre dos computadoras Linux a través de una red local. Creo que una wiki sería útil para muchos.

Esto es lo que encontré hasta ahora:

  • ssh
  • sshfs
  • scp
  • ftp
  • nfs
  • samba
  • dotante

¿Qué es lo más fácil? ¿Más flexible? ¿Más simple? ¿Mejor solución? ¿Cuáles son los pros y los contras de cada uno? ¿Hay otras (mejores) opciones? ¿Cuáles son los parámetros para elegir el mejor método (la solución puede depender de la cantidad de archivos, tamaño de archivo, facilidad versus flexibilidad,...)?

Respuesta1

En un entorno Linux, tanto por seguridad como por facilidad de uso, ssh es la mejor manera de hacerlo. SSH, SSHFS, SCP y SFTP, como usted enumera, son solo servicios diferentes creados sobre el protocolo SSH. SCP es muy fácil de usar, funciona igual que CP pero puede proporcionar nombres de usuario y de máquina en la ruta. Entonces, podríamos hacer un CP como cp ~/music/ ~/newmusic/, pero también podríamos scp ~/music/ user@host:~/newmusicenviarlo fácilmente a la computadora llamada host. Eso es todo: no necesitamos configurar nada. Se le solicitará la contraseña de la cuenta en la otra máquina si no tiene un certificado o alguna otra autenticación configurada (scp comparte esa configuración con ssh, por supuesto).

SFTP es una herramienta que facilita la realización de muchas operaciones en un sistema de archivos remoto: funciona igual que FTP, pero se ejecuta a través de SSH, por lo que es seguro y solo requiere un servidor SSH. man sftple dirá todo sobre cómo usarlo. No uso SFTP solo para mover una carpeta entre dos máquinas, es más útil cuando tienes muchas operaciones que hacer, como si estás reorganizando archivos en otra computadora.

SSHFS simplemente extiende SFTP a un sistema de archivos: le permite montar un host virtual en su sistema de archivos, por lo que las cosas de la red suceden de forma totalmente transparente. SSHFS es para configuraciones semipermanentes, no solo para una transferencia de archivos única. Se necesita un poco más de esfuerzo para configurarlo, sobre lo cual puedes leer enel sitio web del proyecto.

Si necesita trabajar en un entorno de sistema operativo mixto, Samba se convierte en su próxima mejor opción. Windows y OS X soportan Samba de forma completamente automática, y Linux también lo hace, aunque a veces es difícil de usar.

Respuesta2

Mi favorito personal para los casos en los que la seguridad no importa esnetcat+alquitrán:

Para enviar un directorio, haga cd dentro del directorio cuyo contenido desea enviar en la computadora que realiza el envío y haga:

tar -cz . | nc -q 10 -l -p 45454

En la computadora que recibe el contenido, vaya al lugar donde desea que aparezca el contenido y haga:

nc -w 10 $REMOTE_HOST 45454 | tar -xz

Reemplace $REMOTE_HOSTcon ip/nombre de host de la computadora que realiza el envío. También puedes usar un puerto diferente en lugar de 45454.

Lo que realmente sucede aquí es que la computadora 'receptora' se conecta a la computadora emisora ​​en el puerto 45454 y recibe el contenido tar y gzip del directorio, y lo pasa directamente a tar (y gzip) para extraerlo en el directorio actual.

Ejemplo rápido(usando localhost como host remoto)

Computadora 1

caspar@jumpy:~/nctest/a/mydir$ ls
file_a.txt  file_b.log
caspar@jumpy:~/nctest/a/mydir$ tar -cz . | nc -q 10 -l -p 45454

Computadora 2

caspar@jumpy:~/nctest/b$ ls
caspar@jumpy:~/nctest/b$ nc -w 10 localhost 45454 | tar -xz
caspar@jumpy:~/nctest/b$ ls
file_a.txt  file_b.log

Respuesta3

Para movimientos únicos, se recomienda scp.

Pero si descubre que este directorio puede funcionar y necesita moverlo muchas veces para mantener actualizada la otra posición, puede usar rsync (con ssh).

Como rsync tiene muchos argumentos, normalmente lo pongo en un shell pequeño para hacerlo bien (siempre). La idea es enviar sólo cosas que hayan cambiado desde la última vez que se ejecutó.

#!/bin/bash

user="nisse"
host="192.168.0.33"

echo "Sync: /home/media/music/"
rsync --archive --delete -v --progress -e "ssh -l $user " /home/media/music/ $host:/home/media/music/

Esto moverá un directorio llamado "/home/media/music/" desde la computadora local a la computadora llamada 192.168.0.33, usando el usuario "nisse". Y elimine todo lo que haya en el objetivo que no exista en la PC local.

Respuesta4

Probablemente el más rápido sea netcat(como lo describió Caspar).

Me gusta la combinación de tar& ssh, que es segura y aún rápida:

en la fuente

tar -cf - . | ( ssh user@target && cd /target/path && tar -xf - )

Al hacerlo como root, conserva los permisos de los archivos. O utilizar -pen ambos lados. También -Sse podría considerar si tiene archivos escasos.

Es posible reducir la sobrecarga de cifrado sshsi utiliza arcfourun cifrado que funcione con openSSH:

tar -cpSf - . | ( ssh -c arcfour user@targethost && cd /target/path && tar -xpSf - )

Para actualizar la ruta remota, rsynces perfecto:

rsync -av --sparse --delete -e "ssh -c arcfour" . root@targethost:/target/path

información relacionada