Android rsync

tl;dr

  • termux App unter Android installieren
  • App starten openssh installieren und sshd aufrufen
  • am PC adb mit Port-forwarding aktivieren
  • rsync am PC aufrufen

Warum

Vor vielen Jahren (7.5 um genau zu sein) habe ich ein Blogpost zum Thema Datentransfer zwischen Android und PC geschrieben. Ich bin damals schier verzweifelt mit den nicht vorhandenen Möglichkeiten Daten effizient zwischen Android und meinem Linux PC zu transferieren (adb pull geht, kann aber keine Wildcards, ich möchte die Möglichkeiten die rsync bietet).

Heutzutage ist das normalerweise kein Problem mehr, denn die Daten werden ohnehin über einen Cloud-Dienst (in meinem Fall eine selbst-gehostete Nextcloud-Instanz) übertragen. Das funktioniert bei breitbandigen Internetverbindungen so gut, dass man ganz vergisst, welchen Umweg die Daten gerade nehmen.

Etwas anders sieht die Situation aus, wenn man, wie ich gerade, im Camper an einem griechischen Strand mit einem mobilen Hostspot arbeitet 😎.

Es geht doch

Zwar kann ich bei meiner aktuellen, von Google-Diensten befreiten, Android Version der e.foundation auch den Datentransfer Modus für USB aktivieren, nur funktioniert der halt nur manchmal. Der USB-Port auf der rechten Seite meines Notebooks geht öfter als der auf der linken (es sind beide USB3). Und dann kann ich immer noch nicht rsync.

Zum Glück gibt es termux und das sogar ganz easy beim F-droid Store. Die App startet ein Terminal, das auf eine echte Linux-Umgebung zugreifen kann. Mit

pkg install openssh

wird ein SSH-Server installiert und mit

$ sshd -p 8090

kann man selbigen auf Port 8090 (als Beispiel) starten.

sshd mit termux auf Android

Für die weiteren Schritte sollten Sie die Entwickler-Optionen unter Android aktivieren und die Android-Debug-Bridge (adb) auf Ihrem PC installiert haben.

Mit dem Kommando

adb -d forward tcp:8090 tcp:8090

verbinden Sie den Port 8090 auf Ihrem Computer mit dem Port 8090 auf dem durch adb (und USB) verbundenen Android Gerät. Für eine erfolgreichen SSH-Verbindung müssen Sie jetzt nur noch das Benutzer-Passwort am Android Gerät setzen (passwd in der Shell aufrufen), oder einen SSH-Public-Key hinterlegen (in der Datei ~/.ssh/authorized_keys).

Dann reicht der Aufruf:

ssh -p 8090 localhost

um die Verbindung herzustellen.

Ein Eintrag in der lokalen ~/.ssh/config Datei hilft, um die Syntax beim rsync-Kommando zu vereinfachen. Für mein Fairphone habe ich fp3 als Hostnamen gewählt:

Host fp3
  Hostname localhost
  Port 8090

Und nachdem ich den Public-Key meines Yubikeys am Handy hinterlegt habe, kann ich jetzt ganz locker rsync machen:

rsync -av fp3:storage/dcim/Camera/IMG_202111\* .

Und das kopiert alle Fotos aus dem aktuellen Monat (November 2021) in den aktuellen Ordner (der storage-Ordner existiert, weil ich zuvor in der termux-Shell das Kommando termux-setup-storage ausgeführt habe).

android  rsync  ssh 

See also