8 votes

Répertoire de synchronisation sécurisé hors ligne sur la carte SD sur un Android non rooté avec un PC Ubuntu

Y a-t-il un moyen de synchroniser en toute sécurité hors ligne des répertoires entre une carte SD sur Android qui n'est pas rootée et un PC avec Ubuntu?

En toute sécurité = en utilisant une connexion sécurisée entre les appareils (par exemple en utilisant SSH).

Hors ligne = sans accès à Internet, mais le PC et le smartphone sont connectés via LAN.

Synchroniser des répertoires = un processus qui transfère des données entre un smartphone et un PC de telle manière qu'à la fin du processus, les deux appareils contiennent exactement les mêmes données dans les répertoires sélectionnés (de préférence, mais pas nécessairement, en excluant les fichiers filtrés). Le processus est capable de détecter les données supprimées afin de ne pas copier un fichier qui était initialement présent sur les deux appareils et ensuite supprimé sur l'un d'eux.

Mes systèmes

  • Android 6.0.1 (non rooté)
  • PC Xubuntu 18.04 64 bits

Ce que j'ai déjà essayé/vérifié (sans succès)

Unison

Unison pour Android

  • https://play.google.com/store/apps/details?id=com.nerdysoftware.unison
  • Non sécurisé - d'après la description de l'application: "Aucun accès SSH n'est nécessaire - les clients se connectent directement via un socket. Comme les clients Unison se connectent à votre appareil via une connexion de socket directe au lieu de SSH, le serveur ne doit être exécuté que lorsque votre appareil Android est connecté à un réseau de confiance, comme un réseau WiFi domestique. Exécuter le serveur sur d'autres réseaux pourrait exposer les fichiers de votre appareil à des parties non dignes de confiance."
  • Semble également utiliser une version plus ancienne d'Unison (cette application nécessite exactement les mêmes versions sur le serveur et le client pour permettre le transfert de données).

Rsync

SSHDroid

  • https://play.google.com/store/apps/details?id=berserker.android.apps.sshdroid
  • Pour utiliser SSH avec un autre logiciel (voir ci-dessous)
  • Impossible d'écrire/modifier la carte SD en utilisant la connexion ssh. Je suis allé dans les paramètres -> Applications -> SSHDroid -> Autorisations : le stockage est activé. Là, j'ai ouvert le menu contextuel -> toutes les autorisations : lecture de la carte SD disponible. Modification/suppression de données sur la carte SD disponible. En d'autres termes, j'ai vérifié que l'application a la permission de modifier la carte SD : elle l'a.

SSHFS avec SSHHelper

SSHFS avec SimpleSSHD

Ce que j'ai déjà essayé (avec succès partiel/mixte)

Combinaison: Unison (sur PC) + un serveur SSH quelconque (Android) + SSHFS (sur PC)

  • Dans le cas où je pourrais trouver un serveur SSH fonctionnel; utiliser SSHFS pour monter le périphérique Android distant localement et ensuite utiliser Unison pour la synchronisation.
  • Résultats :
    • Lorsque le SSH est effectivement rw, alors ça fonctionne, mais c'est tellement lent que c'est impraticable - il doit demander chaque fichier et répertoire un par un via le réseau. Bien sûr, d'autres applications (comme Unison) doivent aussi le faire, mais elles ne demandent pas chaque fichier un par un séquentiellement (client envoie une demande pour un seul fichier - latence - serveur vérifie et envoie une réponse - client reçoit la réponse et passe au fichier suivant).
    • Unison nécessite la permission de renommer des fichiers ; il crée toujours des fichiers temporaires et des répertoires et lorsque tout est téléchargé et vérifié en double, alors les anciens fichiers (s'il y en a) sont supprimés et les nouveaux fichiers sont renommés. Donc, s'il n'est pas autorisé à renommer, cela ne fonctionne pas.

Serveur SSH/SFTP - Terminal

  • https://play.google.com/store/apps/details?id=net.xnano.android.sshserver
  • Cela fonctionne en réalité mais comporte deux problèmes ;
    • Il faut entrer le mot de passe plusieurs (>10) fois lorsqu'il est monté en sshfs (j'ai essayé un mot de passe trivial et je me suis assuré qu'il n'y avait pas de faute de frappe) et ne supporte pas les clés ssh. J'ai pu résoudre ce problème avec une astuce : zenity --password | sshfs user@host:/ "$PWD/data" -o reconnect,password_stdin, mais je ne suis pas sûr de sa sécurité.
    • Ce ssh est incroyablement lent. Beaucoup plus lent comparé à SSHDroid et SSHHelper (non seulement avec sshfs, mais aussi lorsque je me connecte simplement en utilisant ssh et le terminal ; la frappe et les réponses sont vraiment, très lentes). La vitesse maximale est de 2 Mo/s, mais la plupart du temps c'est ~500 ko/s.
    • Impossible de renommer des fichiers (erreur de permission) ce qui le rend inutilisable avec Unison (sur PC).

Syncthing

Quel problème j'essaie de résoudre

Je veux "juste" synchroniser des données au niveau des fichiers (certains pdf, images, etc.) entre mon PC et mon smartphone Android. J'utilise plusieurs appareils (ordinateurs de bureau, ordinateurs portables, etc.) et j'utilise Unison (note : je n'insiste pas sur cette application) pour synchroniser les données entre eux. Comme je change souvent d'environnement, j'ai besoin que cela fonctionne en un clic et soit aussi rapide que possible (ce que fait Unison à merveille par exemple). Comme je travaille sur différents environnements, je dois couvrir mes cas : parfois je suis sans accès à Internet. D'autres fois, je suis connecté à un réseau non fiable.

C'est aussi la raison pour laquelle je ne peux pas utiliser le cloud (comme Dropbox) : c'est plus lent que deux appareils qui communiquent directement et parfois je suis sans connexion Internet donc je ne peux pas synchroniser même lorsque les appareils sont connectés sur le même réseau.

La raison pour laquelle je veux synchroniser avec la carte SD est simplement parce qu'elle a une plus grande capacité pour que mes fichiers puissent tenir.

1 votes

Likez pour le travail approfondi avec la bêche :) Bienvenue sur notre site

0 votes

@beeshyams Merci :). (Je pensais que c'était une chose si basique, que j'ai continué à chercher une solution en pensant que c'était une évidence...)

1 votes

Pas encore essayé, mais peut-être installer Nextcloud sur votre machine Linux et l'application Nextcloud sur votre appareil Android? Nextcloud est livré avec un client de synchronisation, à ma connaissance. Sinon, si Playstore est acceptable, FolderSync fonctionne via SFTP (c'est-à-dire SSH) et ne nécessiterait pas de logiciel supplémentaire sur votre machine Linux.

3voto

Tom Points 111

À la fin, j'ai opté pour Syncthing. Alors, comment répond-il à mes besoins :

En toute sécurité

Il utilise le chiffrement. Je n'ai pas analysé à quel point il est sécurisé, donc c'est plutôt une question de confiance, mais au moins il ne devrait pas envoyer de données non chiffrées.

Hors ligne

Fonctionne exceptionnellement bien. La détection du réseau local semble fiable et peut connecter les clients directement. Je l'utilise également au travail (de Windows à Windows et de Windows à Linux) pour partager des données avec mes collègues sans les exposer à des entreprises tierces, c'est rapide et fiable. (Des dizaines de gigaoctets sont transférés assez rapidement, donc il semble que le seul goulot d'étranglement soit le réseau local.)

Synchroniser des répertoires

Fonctionne bien, mais à la fin, j'ai décidé de synchroniser les deux sens seulement d'un sous-répertoire au lieu de toutes les données. Il semble qu'Android aime modifier mes fichiers sans mon consentement (surtout les fichiers multimedia), donc à l'exception d'un certain répertoire de travail, je bloque toute modification effectuée par Android. C'est gênant, mais ce n'est pas un problème avec Syncthing.

Un autre problème se pose lors de la synchronisation de gros fichiers (des milliers de mégaoctets et plus), mais encore une fois, il semble que le problème vient de mon appareil, mais après quelques plantages système, Syncthing parvient finalement à transférer les données. (Édition ultérieure : il semble que ce problème se produise vraiment uniquement sur mon appareil Android. La synchronisation d'un seul fichier d'environ 25 Go avec un collègue, de Windows à Windows, s'est déroulée sans aucun problème.)

Avantages

  • Fiable sur différentes plateformes.
  • Il suffit de le configurer et il fonctionne en arrière-plan. Si vous êtes habitué, par exemple, à Dropbox, c'est similaire, sauf que vous ne partagez pas vos données avec une entreprise tierce. Et c'est en fait plus rapide (selon votre expérience), car il synchronise les données entre les clients directement, et non avec un serveur.
  • L'application peut être configurée via un navigateur. Vous pouvez activer l'accès depuis un appareil externe (je recommande d'activer un mot de passe dans ce cas !!!) ce qui vous permet de configurer Syncthing sur Android via votre navigateur de bureau (vous devez simplement trouver l'adresse IP de votre téléphone), ce qui est vraiment pratique.

Inconvénients

  • Comme mentionné précédemment, le seul répertoire sur la carte SD pouvant être synchronisé est /storage/XXXX-XXXX/Android/data/com.nutomic.syncthingandroid/files. C'est vraiment gênant, mais je m'y suis habitué, d'une manière ou d'une autre.
  • La version de bureau Linux ne gère pas les liens symboliques. J'ai résolu ce problème en utilisant le montage bindfs --resolve-symlinks --no-allow-other "srcDir" "shareDir".

Remarques

Je regrette de ne pas avoir la possibilité de vérifier les modifications apportées aux données avant qu'elles ne soient synchronisées, mais c'est une question de préférence et de conception de l'application, pas un problème. Et comme indiqué dans la question, je n'ai pas pu trouver une implémentation fiable d'Unison sur Android.

0 votes

J'ai également choisi Syncthing jusqu'à présent, avez-vous déjà rencontré parfois des fichiers qui sont remplacés par des fichiers de 0 octet ? J'essaie de comprendre si Syncthing est en cause ou si autre chose ne va pas avec mon téléphone...

1 votes

@TobiasKienzler J'utilise Syncthing depuis le jour où j'ai écrit la réponse. D'un côté, non, je n'ai pas rencontré de fichiers remplacés par zéro octet. Cependant, d'un autre côté, il m'arrive parfois que de vieux fichiers soient endommagés (c'est-à-dire que quelques octets seulement sont modifiés, je n'ai pas vérifié lesquels exactement). Personnellement, je soupçonne que le problème vient de la vieille carte mémoire, mais je ne l'ai jamais inspectée plus en profondeur (j'ai seulement créé un dépôt git pour suivre ce qui se passe - le dépôt lui-même a été endommagé après plus d'un an). Je synchronise simplement les données importantes d'un seul sens PC -> téléphone et déplace les données de travail (par exemple, des photos) vers le répertoire sûr.

1 votes

@TobiasKienzler De plus, j'utilise parfois Syncthing pour partager de grosses données (des dizaines de gigaoctets) avec un collègue. C'est une connexion PC -> PC (pas de téléphone impliqué) et je n'ai jamais rencontré un tel problème, donc je suis convaincu que le problème réside dans le téléphone (même si nous l'utilisons beaucoup moins fréquemment que lorsque je synchronise mon téléphone, ce n'est donc pas exactement le même cas.) (Et au fait, désolé pour la réponse tardive.)

0voto

anthony Points 101

J'avais l'habitude de brancher le mobile et de monter les répertoires en utilisant simple-mtpfs

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

Je pouvais ensuite utiliser Unison directement entre les répertoires appropriés

Cela a très bien fonctionné pendant de nombreuses années avec 3 téléphones différents.

De plus, j'espérais utiliser Unison pour Android, mais il ne peut pas créer de fichier de verrouillage sur la carte SD qu'il souhaite utiliser pour ses fichiers de téléphone. (Il pense à tort qu'il y en a un et demande de le supprimer)

Le seul problème est que le connecteur de mon téléphone actuel est tellement lâche que je ne peux pas établir de connexion de transfert de fichiers, seulement de chargement. C'est pourquoi je suis ici à la recherche d'une solution réseau.

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