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
- https://play.google.com/store/apps/details?id=net.danielroggen.unison
- Problème : nécessite un appareil rooté.
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
- https://play.google.com/store/apps/details?id=net.letscorp.rsyncwrapper
- Pas tout à fait destiné à une synchronisation bilatérale.
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
- https://play.google.com/store/apps/details?id=com.arachnoid.sshelper
- Même problème qu'avec SSHDroid. J'ai vérifié les autorisations.
SSHFS avec SimpleSSHD
- https://play.google.com/store/apps/details?id=org.galexander.sshd
- Même problème qu'avec SSHDroid. J'ai vérifié les autorisations.
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).
- 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 :
Syncthing
- https://play.google.com/store/apps/details?id=com.nutomic.syncthingandroid
- Problème : impossible de modifier la carte SD (sur des systèmes non rootés) et les développeurs ne vont pas corriger cela de sitôt.
- La seule solution est d'utiliser une structure de répertoires profonde, difficile à atteindre :
/storage/XXXX-XXXX/Android/data/com.nutomic.syncthingandroid/files
. - Mais pour ce répertoire particulier, cela fonctionne. Sa vitesse est d'environ 5 à 10 Mo/s et je soupçonne que cela soit limité par la carte SD elle-même (ou par Android). Pour l'instant, j'utilise cette solution, mais le répertoire est vraiment peu pratique.
- Problèmes plus petits :
- Il ne supporte pas le suivi des liens symboliques et tant qu'une personne (autre que les développeurs actuels) ne l'implémente pas, il ne sera pas pris en charge.
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.
0 votes
@Izzy Merci pour vos suggestions. NextCloud semble très agréable, il résout également (du moins d'après ce que je vois dans la documentation) de nombreux problèmes que j'ai, mais malheureusement le processus d'installation semble être un peu compliqué et je n'ai actuellement pas le temps pour ça.
0 votes
@Izzy En ce qui concerne FolderSync avec SFTP - J'ai passé mon temps libre d'aujourd'hui à jouer avec et cela semble fonctionner. Ce n'est pas le plus rapide (tout comme mon idée avec sshfs - il doit vérifier le contenu de tous les répertoires sur le réseau) et ne gère pas bien les conflits (les options sont de toujours privilégier les fichiers d'un appareil, de l'autre appareil, de la version la plus récente ou d'ignorer, mais il n'y a pas d'option pour me permettre de choisir au cas par cas) (aussi si la date de modification des deux fichiers change mais le contenu ne change pas, ou si le contenu change de la même manière, il ne vérifiera pas les données et se contentera de le marquer comme en conflit).
0 votes
@Izzy Donc ce n'est pas optimal (je crains un ralentissement énorme lorsque l'horodatage d'un gros fichier change - il devra le télécharger via le réseau juste pour constater qu'il est identique à la version locale), mais cela fait le travail. Encore une fois, merci pour la suggestion.
1 votes
Non, ce n'est pas le plus rapide - mais cela ne m'a jamais dérangé. Il se synchronise en arrière-plan à 3h du matin pendant que je dors, et c'est terminé quand je me lève. Les conflits sont vraiment le problème ici en effet - que je remarque généralement lorsque j'ai copié un dossier entier sur un nouveau périphérique (FS semble incapable de détecter leur état et ne semble même pas essayer CRC ou autre chose pour le découvrir). Mais malheureusement, pas de meilleures idées ici. Soyez les bienvenus pour vérifier ma liste d'applications correspondante, il y a de nombreux candidats que je n'ai pas essayés moi-même ;)
1 votes
@Izzy Je suppose que cela dépend de nos flux de travail - J'ai généralement un peu de travail jusqu'à la dernière minute, puis je synchronise, prends mes affaires et cours pour attraper un train. (À propos de FS - oui, cela me semble exactement comme tu l'as écrit.) Ta liste d'applications est vraiment intéressante, merci de la partager. Je vais essayer de trouver un peu de temps pour vérifier quelques applications de celle-ci :).
0 votes
Juste souvenu : SyncThing que j'entends souvent loué, pourrait être une option pour vous. Devrait être dans la liste liée ;)
1 votes
@Izzy Eh bien, ça semble bon, sauf que ça ne fonctionne pas sur la carte SD ; voir les liens dans ma question (je mentionne l'application là-bas).
0 votes
La plus grande contrainte est votre exigence d'écrire directement sur la carte SD. Les applications n'ont pas accès en écriture de niveau système de fichiers à la carte SD externe depuis KK. Elles doivent utiliser les API SAF pour pouvoir écrire des fichiers dans les répertoires publics de la carte SD. Les solutions en ligne de commande ne peuvent pas utiliser SAF et les applications graphiques ne sont pas très riches en fonctionnalités en termes de synchronisation. Le
rclone
est un excellent utilitaire mais il ne pourra écrire que dans le répertoire privé de l'application de terminal à partir de laquelle il est exécuté. De plus, il ne copie pas les liens symboliques (car le stockage dans le cloud ne le supporte pas) mais peut les suivre (copier les fichiers réels). Cependant, avec un accès root, il existe de nombreuses possibilités.0 votes
Au fait, Android 10 restreint l'accès au système de fichiers même pour le stockage externe principal (
/sdcard
), donc les développeurs qui essaient d'éviter d'utiliser SAF ne pourront pas aller trop loin.