2011-08-22 04:12:04 +0000 2011-08-22 04:12:04 +0000
81
81

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

Quiero transferir archivos (una carpeta de música) entre dos ordenadores Linux. Después de buscar la mejor manera de hacerlo, he visto que hay muchas formas de hacerlo. Sé que esto se ha preguntado mucho, en todas partes y todo el tiempo. El principal problema con esto es que no hay un consenso claro y reciente sobre una mejor manera de hacer esta tarea en 2011 para los principiantes de Linux (incluso dependiendo de algunos parámetros).

Así que 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 también sobre cómo transferir archivos entre dos ordenadores Linux a través de una red local. Creo que un wiki sería útil para muchos.

Esto es lo que he encontrado hasta ahora:

  • ssh
  • sshfs
  • scp
  • sftp
  • nfs
  • samba
  • giver

¿Cuál es el más fácil? ¿Más flexible? ¿La más sencilla? ¿La mejor solución? ¿Cuáles son los pros y los contras de cada una? ¿Hay otras opciones (mejores)? ¿Cuáles son los parámetros para elegir el mejor método (la solución puede depender del número de archivos, el tamaño de los archivos, la facilidad frente a la flexibilidad, …)?

Respuestas (7)

66
66
66
2011-08-22 04:35:30 +0000

En un entorno Linux, tanto por la seguridad como por la facilidad de uso, ssh es el mejor camino a seguir. SSH, SSHFS, SCP, y SFTP, como usted menciona, son todos servicios diferentes construidos sobre el protocolo SSH. SCP es muy fácil de usar, funciona igual que CP pero puedes proporcionar nombres de usuario y máquina en la ruta. Por lo tanto, podríamos hacer un CP como cp ~/music/ ~/newmusic/, pero también podríamos hacer scp ~/music/ user@host:~/newmusic para enviarlo al ordenador llamado host. Eso es todo - no necesitamos configurar nada. Se le pedirá la contraseña de la cuenta en la otra máquina si no tiene certificado o alguna otra autenticación configurada (scp comparte esas configuraciones con ssh, por supuesto).

SFTP es una herramienta que facilita muchas operaciones en un sistema de archivos remoto - funciona como FTP, pero se ejecuta a través de SSH por lo que es seguro y sólo requiere un servidor SSH. man sftp te dirá todo sobre cómo usarlo. Yo no uso SFTP sólo 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 otro ordenador.

SSHFS sólo extiende SFTP en un sistema de archivos: te permite montar un host virtual en tu sistema de archivos, por lo que las cosas de la red ocurren de forma totalmente transparente. SSHFS es para configuraciones semipermanentes, no sólo para una transferencia de archivos única. Requiere un poco más de esfuerzo para configurarlo, que puedes leer en la página web del proyecto .

Si necesitas trabajar en un entorno mixto, Samba es tu siguiente 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.

19
19
19
2011-08-22 06:49:45 +0000

Para movimientos de una sola vez, se recomienda scp.

Pero si encuentras que este dir puede funcionar y necesitas moverlo muchas veces para mantener la otra posición actualizada entonces puedes usar rsync (con ssh).

Como rsync tiene muchos argumentos suelo ponerlo en una pequeña shell para que me salga bien (siempre). La idea es enviar sólo las cosas que han 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 dir llamado “/home/media/music/” del ordenador local al pc llamado 192.168.0.33, usando el usuario “nisse”. Y borrará cualquier cosa en el destino que no exista en el pc local.

10
10
10
2014-04-27 06:30:49 +0000

Te recomendaría probar alternativas en lugar de ir directamente con SSH para mover archivos dentro de tu propia LAN ya que la sobrecarga es INMENSA. Yo optaría por la solución de Caspar si ésta, por la razón que sea, no te funciona:

En el origen:

$ python3 -m http.server {PICK_YOUR_PORT}

En el destino:

$ wget -r {ip / hostname}:{port}/{File / Directory}

Esto no sólo será más ligero que usar SSH sino mucho más rápido con velocidades que van de 45~65MiB en UTP estándar CAT6.
Si realmente quieres exprimir al máximo la conexión prueba a sustituir wget por lftp y utilizar los comandos pget -n20 y mirror -r.

8
8
8
2011-08-22 08:57:03 +0000

El más rápido es probablemente netcat (como describió caspar).

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

En el origen

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

Haciendo eso como root, preserva los permisos de los archivos. O usar -p en ambos lados. También -S podría ser considerado si tienes archivos dispersos.

Es posible reducir la sobrecarga de encriptación de ssh si usas arcfour como cifrado que funciona con openSSH:

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

Para actualizar la ruta remota, rsync es perfecto:

rsync -av --sparse --delete -e "ssh -c arcfour" . root@targethost:/target/path
5
5
5
2011-08-22 10:00:32 +0000

Si es absolutamente necesario hacerlo a través de la LAN, yo usaría rsync, ya que lo retomará donde lo dejó si se interrumpe. También tiene algunos otros trucos para minimizar la cantidad de datos que se transfieren, aunque dudo que muchos/algunos de ellos sean relevantes para el caso de copiar una biblioteca de música a una ubicación virgen. Si la seguridad es una preocupación, simplemente ponga RSYNC_RSH=ssh primero y los datos serán tunelados sobre ssh.

Si lo estuviera haciendo, sin embargo, probablemente no usaría la LAN en absoluto. Copiaría los archivos en, y luego fuera de, un disco duro USB. En mi experiencia, esto puede ser fácilmente varios órdenes de magnitud más rápido que ir a través de la LAN, a pesar de tener que copiar los archivos dos veces - el USB 2.0 está clasificado para 480Mbps, que es más rápido que cualquier cosa que no sea gigabit ethernet, además es menos sensible a las condiciones que degradarán el rendimiento de una LAN. También es completamente independiente del sistema operativo, siempre que se utilice un sistema de archivos que todas las máquinas implicadas puedan manejar: yo recomendaría VFAT/FAT32, ya que es prácticamente universal.

2
2
2
2011-08-22 09:03:18 +0000
0
0
0
2016-04-14 20:18:21 +0000

He seguido el proceso ssh para el inicio de sesión sin contraseña primero http://www.tecmint.com/ssh-passwordless-login-using-ssh-keygen-in-5-easy-steps/

Para los scripts y archivos de texto lo siguiente me funciona bien

Para transferir datos del host local al host remoto.cat localfile | ssh <user>@<ip> "cat > <path>/<remotefile>"

Para transferir datos del host remoto al host local.ssh <user>@<ip> "cat > <path>/<remotefile>" | cat > localfile

Esto me funciona para transferir archivos en sistemas embebidos que no tienen cliente ssh o scp incorporado.

No scp - sólo ssh.