12 votos

Sincronizar archivos arbitrarios con un servidor

Estoy buscando una manera de mantener un archivo (keepass .kdb) en mi Droid2 en sincronía con uno en un servidor.

  • Esto es sólo un archivo en el sistema de archivos - no contactos, calendario, etc.
  • Necesito bidireccional, no sólo empujar o tirar. Si cambia lo del servidor, descárgalo, si cambia lo de Android, súbelo. Sí, esto puede dar lugar a conflictos que necesitan ser resueltos.

Estoy usando Unison para lograr esto entre PCs, pero no hay cliente Unison para Android. Me he encontrado con palabrería acerca de la instalación de OCaml en Android y la ejecución de Unison en eso, pero estoy esperando algo nativo.

Botsync suena prometedor, pero es unidireccional - al hacer una configuración, eliges si es de subida o de bajada.

He visto sugarsync, pero dado que este es mi archivo KeePass, prefiero mantenerlo en mi propio servidor.

0 votos

Iba a sugerir sugarsync ... pero entiendo la preocupación

0 votos

Eche un vistazo a sparkleshare.org - relativamente nuevo proyecto, cliente Android en las obras, creo.

4voto

James Piggot Puntos 357

Es posible que haya encontrado algo que está satisfecho con ahora, pero he compilado un binario de unísono que funciona en Android - es posible el uso de las instrucciones de la mano-que está hablando - los utilicé para cruz-compilar la fuente de Linux dentro de Ubuntu 12.10 utilizando el Android NDK y con unas pocas alteraciones en el código que ahora está trabajando. Siga las instrucciones en https://sites.google.com/site/keigoattic/ocaml-on-Android y entonces tendrás que hacer algunas cosas. Hay un archivo llamado pty.c en la fuente unison - encontrar la siguiente sección:

// openpty
#if defined(__linux)
#include <pty.h>
/*#define HAS_OPENPTY 1*/
#endif

y comentar define HAS_OPENPTY 1 como se muestra. También es necesario abrir ubase/util.ml y editar:

let homeDir () =
  System.fspathFromString "/Your path here"

Comenta desde aquí:

    (if (osType = `Unix) || isCygwin then
       safeGetenv "HOME"
     else if osType = `Win32 then
(*We don't want the behavior of Unison to depends on whether it is run
  from a Cygwin shell (where HOME is set) or in any other way (where
  HOME is usually not set)
       try System.getenv "HOME" (* Windows 9x with Cygwin HOME set *)
       with Not_found ->
*)
       try System.getenv "USERPROFILE" (* Windows NT/2K standard *)
       with Not_found ->
       try System.getenv "UNISON" (* Use UNISON dir if it is set *)
       with Not_found ->
       "c:/" (* Default *)
     else
       assert false (* osType can't be anything else *))

...¡Hasta aquí!

Entonces también tendrás que editar Makefile.Ocaml

   CWD=$(shell pwd)
    EXEC_EXT=
    WINOBJS=
    SYSTEM=generic
    # openpty is in the libutil library
    ifneq ($(OSARCH),solaris)
      ifneq ($(OSARCH),osx)
      #  CLIBS+=-cclib -lutil
      endif
    endif
    buildexecutable::
        @echo Building for Unix
  endif
endif

Y comenta # CLIBS+=-cclib -lutil como se muestra.

Y que yo recuerde, todo eso funcionó. El otro paso una vez compilado es montar tu partición de sistema Android como escribible y copiar unison a la carpeta /system donde están el resto de comandos del shell.

Espero que le sirva a alguien... perdí mucho sueño compilándolo.

3voto

Rytis Puntos 683

Es posible que desee considerar otra opción aquí, si desea utilizar esto para KeePass base de datos de contraseñas. Esto no funcionará para otro material sensible, pero ya que usted pidió específicamente para KeePass, esto es lo que hago:

  • Proteja la base de datos con la contraseña (supongo que ya lo ha hecho), y una llave. Esto le dará una autenticación de dos factores ("algo que sabes", tu contraseña, y "algo que tienes", tu clave). La base de datos de contraseñas sólo puede desbloquearse cuando ambos piezas están en su sitio.

  • Copia la clave en el almacenamiento local de todos tus dispositivos y dale un nombre discreto. Preferiblemente ponla en un directorio abarrotado donde parezca un archivo de configuración o un archivo de ruido aleatorio creado por un programa.

  • Sube tu base de datos a un servicio de almacenamiento de terceros (yo uso Dropbox, pero otras opciones funcionarían igual de bien). Ni que decir tiene que el servicio debe tener un cliente Android si quieres usarlo en tu dispositivo.

  • NO carga tu clave allí -- utiliza otro método para copiarla en los dispositivos que necesites. Dropbox, en particular, guarda una copia de los archivos que subes y luego borras al menos durante una semana con fines de copia de seguridad (bastante conveniente, debo admitir), pero si tu clave ya está en el servidor, no es más seguro que una base de datos normal protegida por contraseña.

  • Configura tus clientes KeePass para que no recuerden la ubicación de la clave (recordar la ubicación de la base de datos está bien).

De esta manera, puedes subir tu base de datos a un sitio web aleatorio, e incluso si tu contraseña se ve comprometida por alguna razón (es decir, registradores de teclado), sólo podrás utilizar la base de datos desde dispositivos que tengan la clave Y saber qué archivo es realmente la clave.

Por comodidad, es posible que quieras tener una autenticación de sólo clave en un dispositivo móvil (las contraseñas seguras son tediosas de escribir en un dispositivo móvil, y obviamente no quieres usar nada corto y fácil aquí). Pero yo recomendaría no hacerlo, ya que en este caso la seguridad es aún menor que la de una base de datos protegida con contraseña: en lugar de una contraseña que tienes en la cabeza, utilizas una "contraseña" (el archivo de claves) que está en tu dispositivo.

KeePass no da ninguna pista sobre si requiere clave, contraseña o ambas, lo que juega a tu favor.

0 votos

+1 por la buena información, estoy de acuerdo en que pass&keyfile debería ser "suficiente" para un archivo keepass. Estoy dejando la pregunta sin respuesta con la esperanza de que habrá un "aquí hay un programa que hace la sincronización" respuesta en el futuro. Gracias.

2voto

RB12 Puntos 21

Hago exactamente lo que pides con FolderSync. Es un programa muy bueno, con muchas opciones y funciones. Yo lo uso como una alternativa personal a Dropbox usando SFTP sobre SSH con keyfile para autenticación. Usted puede incluso configurarlo para detectar automáticamente los cambios en las réplicas locales y desencadenar una carga inmediata. En mi teléfono lo uso para subir fotos a mi servidor tan pronto como las tomo, y funciona a la perfección.

2voto

Dan Puntos 21

También he seguido la compilación cruzada root como se indica en Respuesta de ChC

He publicado UnisonSync que le permite unison sin tener que lidiar con la línea de comandos (y sin rooting) en Google Play:

De la prueba de concepto, que se puso en marcha rápidamente, a una aplicación lista para producción pasó mucho más tiempo del esperado, pero ahora funciona y es muy práctica para sincronizar mis publicaciones y mi repositorio de hojas de datos.

1 votos

Probablemente voy a consolidar las instrucciones para la compilación cruzada en algún momento soonish y poner el binario unison / dropbear en algún lugar, para aquellos que prefieren utilizar la línea de comandos.

1voto

Volker Puntos 11

Yo uso unison montando el Android con sshfs. Como servidor ssh uso SSHDroid .

Pero ojo, unison con sshfs es realmente lento. Aunque con un solo archivo no debería importar.

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