Quiero transferir archivos (una carpeta de música) entre dos computadoras Linux. Después de buscar la mejor manera de hacer esto, he visto que hay muchas formas de hacerlo. Sé que esto se ha pedido 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).
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 una guía para otros también sobre cómo transferir archivos entre dos computadoras Linux a través de una red local. Creo que un wiki sería útil para muchos.
Esto es lo que encontré hasta ahora:
- ssh
- sshfs
- scp
- sftp
- nfs
- samba
- dotante
¿Qué es lo más fácil? ¿El 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 del número de archivos, tamaño de archivo, facilidad frente a flexibilidad, ...)?
fuente
Respuestas:
En un entorno Linux, tanto por seguridad como por facilidad de uso, ssh es la mejor opción. 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 usuarios y máquinas en la ruta. Entonces, podríamos hacer un CP como
cp ~/music/ ~/newmusic/
, pero podríamos hacer lo mismoscp ~/music/ user@host:~/newmusic
para enviarlo a la computadora llamada 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 un certificado o alguna otra configuración de autenticación (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 sftp
le dirá todo sobre cómo usarlo. No uso SFTP solo para mover una carpeta entre dos máquinas, es más útil cuando tiene muchas operaciones que hacer, como si está reorganizando archivos en otra computadora.SSHFS solo 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 ocurren de manera totalmente transparente. SSHFS es para configuraciones semipermanentes, no solo una transferencia de archivos única. Se necesita un poco más de esfuerzo para configurarlo, sobre el cual puede leer en el 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 admiten Samba de forma completamente automática, y Linux también, aunque a veces es difícil de usar.
fuente
scp
que funcione, ¿necesitamos configurar algún tipo de servidor ssh, oyente o desbloquear algo en el otro lado? Recibo errores de "Conexión rechazada".openssh-server
tiene que estar instalado en Ubuntu Natty.ssh
utiliza cifrado, lo que provocará una sobrecarga adicional. Si las computadoras involucradas tienen CPU bastante lentas, esto podría marcar la diferencia. En ese casonetcat
o similar (ver la respuesta de Caspar) podría ser preferible. Por supuesto, solo si realmente no necesita cifrado (en una LAN protegida).Mi favorito personal para casos donde la seguridad no importa es netcat + tar :
Para enviar un directorio, cd dentro del directorio cuyos contenidos desea enviar en la computadora haciendo el envío y hacer:
tar -cz . | nc -q 10 -l -p 45454
En la computadora que recibe el contenido, cd donde desea que aparezca el contenido y haga:
nc -w 10 $REMOTE_HOST 45454 | tar -xz
Reemplace
$REMOTE_HOST
con ip / hostname de la computadora que realiza el envío. También puede usar un puerto diferente en lugar de45454
.Lo que realmente sucede aquí es que la computadora 'receptora' se conecta a la computadora que envía en el puerto 45454 y recibe el contenido tar'd y gzip'd del directorio, y lo pasa directamente a tar (y gzip) para extraerlo El directorio actual.
Ejemplo rápido (usando localhost como host remoto)
Computadora 1
Computadora 2
fuente
-q
opción indica que está utilizando openbsd-netcat , mientras que gnu-netcat también es bastante común (predeterminado en Arch Linux ). ¿Podría extender su respuesta para incluir la sintaxis de gnu-netcat ?Para movimientos únicos, se recomienda scp.
Pero si encuentra que este directorio puede funcionar y necesita moverlo muchas veces para mantener actualizada la otra posición, puede usar rsync (con ssh).
Dado que rsync tiene muchos argumentos, generalmente lo coloco en un pequeño shell para que lo haga bien (cada vez). La idea es enviar solo cosas que hayan cambiado desde la última vez que se ejecutó.
Esto moverá un directorio llamado "/ home / media / music /" de la computadora local a la PC llamada 192.168.0.33, usando el usuario "nisse". Y elimine cualquier cosa en el destino que no exista en la PC local.
fuente
Te recomendaría que probaras alternativas en lugar de utilizar SSH para mover archivos dentro de tu propia LAN, ya que la sobrecarga es INMENSA. Iría con la solución de Caspar si esta, por alguna razón, no funciona para ti:
En la fuente:
En destino:
Esto no solo será más liviano que usar SSH, sino mucho más rápido con velocidades que oscilan entre 45 y 65MiB en UTP CAT6 estándar.
Si realmente quiere exprimir el máximo rendimiento de la conexión intente reemplazar
wget
conlftp
y usarpget -n20
ymirror -r
comandos.fuente
El más rápido es probablemente
netcat
(como se describe caspar).Me gusta la combinación de
tar
&ssh
, que es segura y aún rápida:En la fuente
Al hacer eso como root, conserva los permisos de archivo. O usar
-p
en ambos lados. También-S
podría considerarse si tiene archivos dispersos.Es posible reducir la sobrecarga de cifrado
ssh
si se usaarcfour
como cifrado que funciona con openSSH:Para actualizar la ruta remota,
rsync
es perfecto:fuente
Si es absolutamente necesario hacerlo a través de la LAN, lo usaría
rsync
, ya que continuará 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 / alguno de ellos sean relevantes para el caso de copiar una biblioteca de música en una ubicación virgen. Si la seguridad es una preocupación, solo configúrelaRSYNC_RSH=ssh
primero y los datos se tunelizarán a través de ssh.Sin embargo, si realmente lo estuviera haciendo, probablemente no usaría la LAN en absoluto. Copiaría los archivos en, luego fuera de, un disco duro USB. En mi experiencia, esto puede ser fácilmente varios órdenes de magnitud más rápido que pasar por la LAN, a pesar de tener que copiar los archivos dos veces: USB 2.0 tiene una capacidad de 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á el rendimiento de una LAN. También es completamente independiente del sistema operativo, siempre que use un sistema de archivos que puedan manejar todas las máquinas involucradas; recomendaría VFAT / FAT32, ya que es bastante universal.
fuente
Sugeriría rsync ya que copiará los archivos de forma incremental. Puede configurarlo para copiar archivos modificados o nuevos solo una vez que haya realizado la actualización inicial. Puede usar ssh como capa de transporte si lo desea.
fuente
Uso Unison , que es un excelente sincronizador de archivos en muchos protocolos diferentes. Puede configurarlo para usar
scp
,rcp
,ftp
o incluso de forma local en el sistema de archivos entre dos carpetas. Lo uso para sincronizar mi biblioteca de música, ya que puede transferir múltiples archivos a la vez a través de la red y es realmente sintonizable en su configuración. Mantengo mi colección de música respaldada y sincronizada en 2-3 computadoras. Solo copiará los archivos modificados, y lo hace manteniendo un índice en ambos extremos de la transferencia para poder saber cuándo un cliente ha cambiado el archivo o cuándo ha cambiado el archivo del servidor.Su kilometraje puede variar, pero sin duda es mucho mejor que
scp
incluir toda su colección de música cada vez que agrega una nueva canción :)fuente
Seguí el proceso ssh para iniciar sesión sin contraseña primero http://www.tecmint.com/ssh-passwordless-login-using-ssh-keygen-in-5-easy-steps/
Para secuencias de comandos y archivos de texto, lo siguiente funciona bien para mí
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 funciona para mí para transferir archivos en sistemas embebidos que no tienen un cliente ssh o scp incorporado.
No scp - solo ssh.
fuente