Synchroniser des fichiers arbitraires avec un serveur

12

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

  • Ce n'est qu'un fichier sur le système de fichiers - pas les contacts, le calendrier, etc.
  • J'ai besoin de bidirectionnel, pas seulement de pousser ou de tirer. Si le serveur change, téléchargez-le, si Android change, téléchargez-le. Oui, cela peut entraîner des conflits qui doivent être résolus.

J'utilise Unison pour y parvenir entre PC, mais il n'y a pas de client Unison pour Android. J'ai trouvé agitant d'installer OCaml sur Android et d'exécuter Unison sur cela, mais j'espère quelque chose de natif.

Botsync semble prometteur, mais il est unidirectionnel - lorsque vous effectuez une configuration, vous choisissez s'il s'agit d'un télé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érerais le conserver sur mon propre serveur.

Jason Viers
la source
J'allais suggérer sugarsync ... mais je comprends l'inquiétude
Daniel
Jetez un œil à sparkleshare.org - projet relativement nouveau, client Android en préparation, je crois.
Sparx

Réponses:

3

Vous pouvez envisager une autre option ici, si vous souhaitez l'utiliser pour la base de données de mots de passe KeePass. Cela ne fonctionnera pas pour d'autres matériaux sensibles, mais puisque vous avez spécifiquement demandé 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à) et une clé. Cela vous donnera une 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 de mots de passe ne peut être déverrouillée que lorsque les deux pièces sont en place.
  • Copiez la clé dans le stockage local de tous vos appareils et donnez-lui un nom discret. Placez-le de préférence dans un répertoire bondé où il ressemblerait à un fichier de configuration ou à 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 souhaitez l'utiliser sur votre appareil.

  • N'y téléchargez PAS votre clé - 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 au moins pendant une semaine à des fins de sauvegarde (assez pratique, je dois admettre), mais si votre clé est déjà sur le serveur, ce n'est pas plus sécurisé qu'un mot de passe normal- base de données protégée.

  • Configurez vos clients KeePass pour ne pas se souvenir de l'emplacement de la clé (se souvenir de l'emplacement de la base de données est très bien).

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 (c.-à-d. Les enregistreurs de clavier), vous ne pouvez utiliser la base de données qu'à partir d'appareils qui ont la clé ET maintenant quel fichier est réellement la clé .

Pour plus de commodité, vous souhaiterez peut-être avoir 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 quoi que ce soit de court et de facile ici). Mais je déconseille cela, car dans ce cas, la sécurité est encore plus faible qu'une base de données protégée par mot de passe - au lieu d'un mot de passe que vous avez dans votre tête, vous utilisez un "mot de passe" (le fichier clé) qui se trouve sur votre appareil .

KeePass ne donne aucune indication s'il nécessite une clé, un mot de passe ou les deux - ce qui fonctionne à votre avantage.

Martin Tapankov
la source
+1 pour de bonnes informations, je suis d'accord que le pass & keyfile devrait être "suffisant" pour un fichier keepass. Je laisse la question sans réponse dans l'espoir qu'il y aura une réponse "voici un programme qui se synchronise" à l'avenir. Merci!
Jason Viers
4

Vous avez peut-être trouvé quelque chose dont vous êtes maintenant satisfait, mais j'ai compilé un binaire d'unisson qui fonctionne sur Android - il est possible d'utiliser les instructions d'agitation dont vous parlez - je les ai utilisées pour compiler de manière croisée la source Linux dans Ubuntu 12.10. en utilisant le NDK Android et avec quelques modifications au code, il fonctionne maintenant. Suivez les instructions sur https://sites.google.com/site/keigoattic/ocaml-on-android et ensuite vous devrez faire quelques choses. Il y a un fichier appelé pty.c dans la source unison - trouvez la section suivante:

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

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

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

Commentez 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 modifier 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 -lutilcomme indiqué.

Et autant que je me souvienne, tout a fonctionné. L'autre étape une fois compilée consiste à monter votre partition système Android en écriture et à copier à l'unisson dans le dossier / system où se trouvent toutes les autres commandes du shell.

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

ChC
la source
2

Je fais exactement ce que vous demandez avec FolderSync. C'est un très beau logiciel, avec de nombreuses options et fonctionnalités. Je l'utilise comme alternative personnelle au dropbox en utilisant SFTP sur SSH avec un fichier clé pour l'authentification. Vous pouvez même le configurer pour détecter automatiquement les modifications 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.

RB12
la source
2

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

J'ai publié UnisonSync qui vous permet de fusionner sans traiter avec la ligne de commande (et sans enracinement) sur Google Play:

De la preuve de concept, qui fonctionnait rapidement, à une application prête pour la production, cela a pris beaucoup plus de temps que prévu, mais maintenant cela fonctionne et est très pratique pour synchroniser mes publications et mon référentiel de fiches techniques.

Dan
la source
1
Je consoliderai probablement les instructions de compilation croisée à un moment donné et mettrai le binaire unisson / dropbear quelque part, pour ceux qui préfèrent utiliser la ligne de commande.
Dan
1

J'utilise à l'unisson en montant l'androïde avec sshfs. En tant que 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.

Volker
la source
0

Je ne connais rien de natif qui fasse ça. Il existe de nombreuses applications de synchronisation de fichiers, mais toutes celles que j'ai vues sont soit unidirectionnelles, soit dépendent de l'utilisateur pour synchroniser manuellement le fichier du téléphone vers le cloud. Ce que vous avez l'intention de faire devrait être possible avec l'API Dropbox, mais je ne sais pas si vous êtes prêt à créer votre propre application personnalisée qui surveille les fichiers spécifiques dont vous avez besoin de synchroniser

FoamyGuy
la source
J'avais considéré l'itinéraire de l'application personnalisée, mais si je le faisais, ce serait d'écrire un client natif Unison plutôt qu'un dropbox (donc il restera sur mon serveur).
Jason Viers
0

Une recherche de marché a révélé aFileSync qui prétend synchroniser des fichiers via FTP et prend également en charge la synchronisation automatique des fichiers. Vous devrez exécuter un serveur FTP par vous-même.

Il y a aussi SK Sync , mais les utilisateurs ont rapporté des résultats mitigés avec.

Évidemment, avant d'essayer l'un de ces programmes / applications, veuillez sauvegarder vos fichiers sur le PC / serveur ainsi que sur votre appareil Android.

Sparx
la source
aFileSync semble avoir tous les comportements que je veux. Les critiques sont un peu effrayantes et je vais devoir configurer un serveur FTP pour voir comment ça se passe.
Jason Viers
-1

Pour synchroniser les fichiers à partir d'Android, c'est la nouvelle version de mon application BotSyncPlus . Lorsque vous avez écrit sur BotSync, il n'y avait qu'une seule configuration pour le téléchargement ou le téléchargement. Mais maintenant, une nouvelle version BotSyncPlus est disponible, où est multi-configuration.

Igor Mino
la source