8 votos

Directorio de sincronización segura fuera de línea en la tarjeta sd en Android no rooteado con Ubuntu PC

¿Hay alguna manera de sincronizar de forma segura los directorios entre la tarjeta sd en Android que no tiene root y el PC con Ubuntu?

Con seguridad \= utilizando una conexión segura entre los dispositivos (por ejemplo, utilizando ssh).

Fuera de línea \= sin acceso a Internet, pero el PC y el smartphone están conectados a través de la LAN.

Sincronizar directorios \= un proceso que transfiere datos entre el smartphone y el PC de manera que al final del proceso, ambos dispositivos contengan exactamente los mismos datos en los directorios seleccionados (preferiblemente, pero no necesariamente, excluyendo los archivos filtrados). El proceso es capaz de detectar los datos eliminados, por lo que no copia el archivo que estaba originalmente en ambos dispositivos y que posteriormente fue eliminado en uno de ellos.

Mis sistemas

  • Android 6.0.1 (no rooteado)
  • Xubuntu 18.04 64 bit PC

Lo que ya he probado/comprobado (sin éxito)

Unison

Unison para Android

  • https://play.google.com/store/apps/details?id=com.nerdysoftware.unison
  • No es seguro - de la descripción de la aplicación: "No es necesario el acceso SSH - los clientes se conectan directamente a través de un socket. Debido a que los clientes de Unison se conectan a su dispositivo a través de una conexión de socket directa en lugar de a través de SSH, el servidor sólo debe ejecutarse cuando su dispositivo Android está conectado a una red de confianza, como un WiFi doméstico. Ejecutar el servidor en otras redes podría exponer los archivos de tu dispositivo a personas no confiables."
  • También parece utilizar una versión antigua de Unison (esta aplicación requiere exactamente las mismas versiones en el servidor y el cliente para permitir la transferencia de datos).

Rsync

SSHDroid

  • https://play.google.com/store/apps/details?id=berserker.Android.apps.sshdroid
  • Para usar SSH con otro software (ver abajo)
  • No se puede escribir/modificar la tarjeta SD usando la conexión ssh. Fui a la configuración -> Aplicaciones -> SSHDroid -> Permisos: el almacenamiento está habilitado. Allí abrí el menú contextual -> todos los permisos: lectura de la tarjeta SD disponible. Modificación/borrado de datos en la tarjeta SD disponible. Es decir, he comprobado que la aplicación tiene permiso para modificar la tarjeta SD: lo tiene.

SSHFS con SSHHelper

SSHFS con SimpleSSHD

Lo que ya he probado (con éxito mixto/parcial)

Combinación: Unison (en PC) + algún servidor SSH (Android) + SSHFS (en PC)

  • En caso de que pueda encontrar un servidor SSH que funcione; use SSHFS para montar el dispositivo Android remoto localmente y luego use Unison para la sincronización.
  • Resultados:
    • Cuando el SSH es realmente rw, entonces funciona, pero es tan lento que es poco práctico - debe pedir cada archivo y directorio en la red. Por supuesto, otras aplicaciones (como Unison) deben hacer eso también, pero no piden cada archivo secuencialmente (no: el cliente envía una solicitud para un solo archivo - latencia - el servidor comprueba y envía la respuesta - el cliente recibe la respuesta y pasa al siguiente archivo).
    • Unison requiere permiso para renombrar archivos; siempre crea archivos y directorios temporales y cuando todo se descarga y se comprueba, entonces se borran los archivos antiguos (si los hay) y se renombran los nuevos. Así que si no se permite el renombramiento, no funciona.

Servidor SSH/SFTP - Terminal

  • https://play.google.com/store/apps/details?id=net.xnano.Android.sshserver
  • Este en realidad funciona pero tiene dos problemas;
    • Requiere introducir la contraseña varias (>10) veces cuando se monta como sshfs (probé una trivial y me aseguré de que no es un error tipográfico) y no admite claves ssh. Pude resolver este problema con un hack: zenity --password | sshfs user@host:/ "$PWD/data" -o reconnect,password_stdin pero no estoy seguro de lo seguro que es.
    • Este ssh es increíblemente lento . Mucho más lento cuando se compara con SSHDroid y SSHHelper (no sólo con sshfs, sino también cuando simplemente me conecto usando ssh y la terminal; la escritura y las respuestas son muy, muy lentas). La velocidad máxima es de 2 MB/s, pero la mayor parte del tiempo es de ~500kB/s.
    • No se pueden renombrar los archivos (error de permisos) por lo que lo hace inutilizable con Unison (en PC).

Sincronización

  • https://play.google.com/store/apps/details?id=com.nutomic.syncthingandroid
  • Problema: no se puede modificar la tarjeta SD (en sistemas no rooteados) y los desarrolladores no van a arreglar esto pronto .
  • La única solución es utilizar oscuro , estructura de directorios profunda de difícil acceso: /storage/XXXX-XXXX/Android/data/com.nutomic.syncthingandroid/files .
  • Pero para este directorio en particular, funciona. Su velocidad es de unos 5 - 10 MB/s y sospecho que está siendo ralentizado por la propia tarjeta SD (o Android). Por ahora, estoy usando esta solución, pero el directorio es realmente incómodo.
  • Problemas menores:
    • No admite el seguimiento de los enlaces simbólicos y hasta que alguien (aparte de los actuales desarrolladores) ponerlo en práctica No va a ser apoyado.

Qué problema estoy tratando de resolver

Yo "sólo" quiero sincronizar datos a nivel de archivos (algunos pdfs, imágenes, etc.) entre mi PC y mi smartphone Android. Utilizo varios dispositivos (ordenador de sobremesa, portátil, etc.) y uso Unison (nota: no insisto en esta aplicación) para sincronizar los datos entre ellos. Como cambio de entorno con bastante frecuencia, necesito que funcione con una sola pulsación de botón y que sea lo más rápido posible (algo que, por ejemplo, Unison hace en gran medida). Como trabajo en diferentes entornos, necesito cubrir mis casos: a veces estoy sin acceso a Internet. Otras veces estoy conectado a una red no fiable.

Esta es también la razón por la que no puedo usar la nube (como Dropbox): es más lento que dos dispositivos comunicándose directamente y a veces estoy sin conexión a Internet por lo que no puedo sincronizar incluso cuando los dispositivos están conectados en la misma red.

La razón por la que quiero sincronizar con la tarjeta SD es simplemente porque tiene mayor capacidad para que quepan mis archivos.

1 votos

Upvoted para el trabajo minucioso de la pala :) Bienvenido a nuestro sitio

0 votos

@beeshyams Gracias :). (Pensé que esto es algo tan básico, que seguí buscando la solución creyendo que es algo natural...)

1 votos

No lo he probado, pero ¿tal vez instalando Nextcloud en tu máquina Linux y la aplicación Nextcloud en tu dispositivo Android? Nextcloud viene con un cliente de sincronización AFAIK. Alternativamente, si Playstore es aceptable, FolderSync funciona a través de SFTP (es decir, SSH) y no requeriría software adicional en su máquina Linux.

3voto

Tom Puntos 81

Al final, me conformé con Sincronización . Entonces, ¿cómo cumple mis requisitos?

Con seguridad

Utiliza la encriptación. No he analizado lo seguro que es, así que esto es más una cuestión de confianza, pero al menos no debería enviar datos sin cifrar.

Fuera de línea

Funciona excepcionalmente bien. La detección de la LAN local parece fiable y es capaz de conectar a los clientes directamente. Lo uso también en el trabajo (de Windows a Windows y de Windows a Linux) para compartir datos con compañeros de trabajo sin exponerlos a terceras empresas, es rápido y fiable. (Se transfieren decenas de gigabytes con bastante rapidez, por lo que parece que el único cuello de botella es la red local).

Sincronizar directorios

Funciona bien, pero al final, decidí sincronizar bidireccionalmente sólo un subdirectorio en lugar de todos los datos. Parece que a Android le gusta modificar mis archivos sin mi consentimiento (especialmente los archivos multimedia), así que excepto cierto directorio de trabajo, bloqueo cualquier cambio realizado por Android. Es un inconveniente, pero no es un problema con Syncthing.

Otro problema es cuando se sincronizan archivos grandes (miles de megabytes y más), pero de nuevo, parece que es un problema con mi dispositivo, pero después de unos cuantos bloqueos del sistema, Syncthing finalmente logra transferir los datos. (Edición posterior: parece que este problema sólo ocurre en mi dispositivo Android. La sincronización de un solo archivo de ~25GB con un compañero de trabajo, de Windows a Windows fue sin ningún problema).

Pros

  • Fiable en todas las plataformas.
  • Sólo hay que configurarlo y funciona en segundo plano. Si estás acostumbrado, por ejemplo, a Dropbox, es similar, salvo que no compartes tus datos con una empresa tercera. Y de hecho es más rápido (ymmv), porque sincroniza los datos entre clientes directamente, no con el servidor.
  • La aplicación se puede configurar a través del navegador. Puedes habilitar el acceso desde el dispositivo exterior (¡¡recomiendo habilitar la contraseña en este caso!!) lo que te permite configurar Android Syncthing a través de tu navegador de escritorio (sólo necesitas averiguar la dirección IP de tu teléfono), lo que es realmente conveniente.

Cons

  • Como ya se ha mencionado en la pregunta, el único directorio de la tarjeta SD que se puede sincronizar es /storage/XXXX-XXXX/Android/data/com.nutomic.syncthingandroid/files . Es realmente incómodo, pero me acostumbré a ello, de alguna manera.
  • Versión de escritorio de Linux no maneja los enlaces simbólicos . Lo resolví utilizando el montaje bindfs --resolve-symlinks --no-allow-other "srcDir" "shareDir" .

Notas

Echo de menos la opción de revisar los cambios de datos antes de que se sincronicen, pero esto es cuestión de preferencia y diseño de la aplicación, no un problema. Y como se indica en la pregunta, no he podido encontrar una implementación fiable de Unison en Android.

0voto

anthony Puntos 101

Solía conectar el móvil y montar los directorios usando simple-mtpfs

  mkdir /mnt/phone
  simple-mtpfs -o enable-move /mnt/phone

Entonces podría usar unison directamente entre los directorios apropiados

Funcionó muy bien durante muchos años en 3 teléfonos diferentes.

Adicional esperaba usar unison para Android, pero no puede crear un archivo de bloqueo en la sdcard que quiere usar para sus archivos de un teléfono. (Erróneamente piensa que hay uno, y pide que lo elimine)

El único problema es que el enchufe de mi teléfono actual es tan flojo que no puedo conseguir una conexión de transferencia de archivos, sólo la carga de energía. Por eso estoy aquí buscando una solución de red.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X