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 como 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 podríamos hacer fácilmente scp ~/music/ [email protected]:~/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 como 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 acerca de 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 que 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 son compatibles con Samba de forma completamente automática, y Linux también, aunque a veces es difícil de usar.
Mi favorito personal para los casos en los que la seguridad no importa es netcat + tar:
Para enviar un directorio, haga un 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, haga un cd donde desea que aparezca el contenido y haga lo siguiente:
nc -w 10 $REMOTE_HOST 45454 | tar -xz
Reemplazar $REMOTE_HOST
con ip/nombre de host de la computadora que realiza el envío. También puede 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'd y gzip'd del directorio, y lo pasa directamente a tar (y gzip) para extraerlo en el directorio actual.
Ejemplo rápido (utilizando localhost como host remoto)
Equipo 1
[email protected]:~/nctest/a/mydir$ ls
file_a.txt file_b.log
[email protected]:~/nctest/a/mydir$ tar -cz . | nc -q 10 -l -p 45454
Computadora 2
[email protected]:~/nctest/b$ ls
[email protected]:~/nctest/b$ nc -w 10 localhost 45454 | tar -xz
[email protected]:~/nctest/b$ ls
file_a.txt file_b.log
Para movimientos de una sola vez, se recomienda scp.
Pero si encuentra que este directorio puede funcionar y necesita moverlo muchas veces para mantener la otra posición actualizada, entonces puede usar rsync (con ssh).
Dado que rsync tiene muchos argumentos, generalmente lo pongo en un pequeño caparazón para hacerlo bien (siempre). La idea es enviar solo 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 directorio llamado "/home/media/music/" desde la computadora local a la PC llamada 192.168.0.33, usando el usuario "nisse". Y elimine cualquier cosa en el objetivo que no exista en la PC local.