12 votes

Synchronisation de fichiers arbitraires avec un serveur

Je cherche un moyen de synchroniser un fichier (keepass .kdb) sur mon Droid2 avec un fichier sur un serveur.

  • Il s'agit simplement d'un fichier sur le système de fichiers - pas de contacts, d'agenda, etc.
  • Je veux du bidirectionnel, pas seulement du push ou du pull. Si le serveur change, téléchargez-le, si l'Android change, téléchargez-le. Oui, cela peut entraîner des conflits qui doivent être résolus.

J'utilise Unison pour réaliser cela entre PC, mais il n'y a pas de client Unison pour Android. J'ai trouvé des explications sur l'installation d'OCaml sur Android et l'exécution d'Unison sur ce système, mais j'espère quelque chose de natif.

Botsync Cela semble prometteur, mais c'est unidirectionnel - lorsque vous créez une configuration, vous choisissez s'il s'agit d'un chargement ou d'un téléchargement.

J'ai vu sugarsync, mais étant donné qu'il s'agit de mon fichier KeePass, je préfère le garder sur mon propre serveur.

4voto

James Piggot Points 357

Vous avez peut-être trouvé quelque chose qui vous convient maintenant mais j'ai compilé un binaire d'unison qui fonctionne sur Android - c'est possible en utilisant les instructions que vous mentionnez - je les ai utilisées pour faire une compilation croisée des sources linux dans ubuntu 12.10 en utilisant le NDK Android et avec quelques modifications du code cela fonctionne maintenant. Suivez les instructions à l'adresse https://sites.google.com/site/keigoattic/ocaml-on-Android et ensuite vous devrez faire quelques petites choses. Il y a un fichier appelé pty.c dans le source d'unison - trouvez la section suivante :

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

et commentez define HAS_OPENPTY 1 comme indiqué. Vous devez également ouvrir ubase/util.ml et le modifier :

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

Faites des commentaires à partir d'ici :

    (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 *))

...jusqu'ici !

Ensuite, vous devrez également éditer 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

Et commentez # CLIBS+=-cclib -lutil comme indiqué.

Et pour autant que je m'en souvienne, ça a marché. L'autre étape une fois compilée est de monter votre partition système Android en écriture et de copier unison dans le dossier /system où se trouve le reste des commandes shell.

J'espère que cela aidera quelqu'un... J'ai perdu beaucoup de sommeil à le compiler.

3voto

Rytis Points 683

Vous pouvez envisager une autre option ici, si vous voulez l'utiliser pour la base de données de mots de passe KeePass. Cela ne fonctionnera pas pour d'autres documents sensibles, mais puisque vous avez demandé spécifiquement pour KeePass, voici ce que je fais :

  • Protégez la base de données avec le mot de passe (je suppose que vous l'avez déjà fait), y une clé. Cela vous donnera un authentification à deux facteurs ("quelque chose que vous savez" -- votre mot de passe, et "quelque chose que vous avez" -- votre clé). La base de données des mots de passe ne peut être déverrouillée que lorsque les deux les pièces sont en place.

  • Copiez la clé dans le stockage local de tous vos appareils, et donnez-lui un nom discret. De préférence, mettez-la dans un répertoire encombré où elle aura l'air d'un fichier de configuration ou d'un fichier de bruit aléatoire créé par un programme.

  • Téléchargez votre base de données vers un service de stockage tiers (j'utilise Dropbox, mais d'autres options fonctionneraient tout aussi bien). Il va sans dire que le service doit avoir un client Android si vous voulez l'utiliser sur votre appareil.

  • NE PAS Téléchargez votre clé à cet endroit - utilisez une autre méthode pour la copier sur les appareils dont vous avez besoin. Dropbox, en particulier, conserve une copie des fichiers que vous téléchargez puis supprimez pendant au moins une semaine à des fins de sauvegarde (assez pratique, je dois l'admettre), mais si votre clé est déjà sur le serveur, elle n'est pas plus sûre qu'une base de données normale protégée par un mot de passe.

  • Configurez vos clients KeePass pour qu'ils ne se souviennent pas de l'emplacement de la clé (il est possible de se souvenir de l'emplacement de la base de données).

De cette façon, vous pouvez télécharger votre base de données sur un site Web aléatoire, et même si votre mot de passe est compromis pour une raison quelconque (par exemple, les enregistreurs de clavier), vous ne pouvez utiliser la base de données qu'à partir de dispositifs qui ont la clé ET qui savent quel fichier est réellement la clé.

Pour des raisons de commodité, vous pourriez vouloir disposer d'une authentification par clé uniquement sur un appareil mobile (les mots de passe sécurisés sont fastidieux à taper sur un appareil mobile, et vous ne voulez évidemment pas utiliser quelque chose de court et facile ici). Mais je vous le déconseille, car dans ce cas la sécurité est encore plus faible que celle d'une base de données protégée par un mot de passe -- au lieu d'un mot de passe que vous avez en tête, vous utilisez un "mot de passe" (le fichier clé) qui se trouve sur votre appareil.

KeePass ne donne aucun indice sur la nécessité de la clé, du mot de passe ou des deux, ce qui est tout à votre avantage.

2voto

RB12 Points 21

Je fais exactement ce que vous demandez avec FolderSync. C'est un très bon logiciel, avec beaucoup d'options et de fonctionnalités. Je l'utilise comme une alternative personnelle à Dropbox en utilisant SFTP sur SSH avec un fichier clé pour l'authentification. Vous pouvez même le configurer pour détecter automatiquement les changements sur les répliques locales et déclencher un téléchargement immédiat. Sur mon téléphone, je l'utilise pour télécharger des photos sur mon serveur dès que je les prends, et cela fonctionne parfaitement.

2voto

mszegedy Points 3

J'ai également suivi la compilation croisée Root comme indiqué dans La réponse de ChC

J'ai publié UnisonSync qui vous permet de faire l'unisson sans vous occuper de la ligne de commande (et sans rooter) sur Google Play :

De la preuve de concept, qui a rapidement fonctionné, à une application prête pour la production, il a fallu beaucoup plus de temps que prévu, mais maintenant cela fonctionne et c'est très pratique pour synchroniser mes publications et mon dépôt de fiches techniques.

1voto

Volker Points 11

J'utilise unison en montant l'Android avec sshfs. Comme serveur ssh j'utilise SSHDroid .

Mais attention, l'unisson avec sshfs est vraiment lent. Bien qu'avec un seul fichier, cela ne devrait pas avoir d'importance.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X