Von Linux aus bequem auf Raspi-Dateien remote zugreifen

wer so wie ich mehrere Raspberry-Pis im Einsatz hat, auf diese vornehmlich remote zugreift und daran auch noch Daten produzierende Sensoren hat, der wird sich wohl auch schon das ein oder andere Mal gewünscht haben, bequem auf diese Dateien zugreifen zu können. Ich habe für mich die Lösung mittels SSH-Filesystem gefunden. Dazu muss auf dem Raspberry-Pi SSH aktiviert sein – das kann man über raspi-config erledigen:
sudo raspi-config
Unter dem Menüpunkt 8 Advanced Options befindet sich der Untermenüpunkt A4 SSH, der erlaubt SSH einzuschalten – enable.
raspiconfig-main

raspiconfig-advanced

raspiconfig-ssh

Nach diesem Schritt kann man sich remote über sein Netzwerk auf dem Raspberry-Pi einloggen und diesen damit headless betreiben. Unter Windows geht das z.B. über Putty, unter Linux über das Terminal – nämlich mit dem Kommando:
ssh pi@<ip-adresse/alias> z.B. ssh pi@192.168.10.12
Was nun aber zu nerven beginnt, ist das Eingeben des Passwortes, sobald man sich über SSH auf dem Raspi einlogged. Aber dafür gibt es auch Abhilfe.
Wenn man auf dem Rechner,von dem aus man sich auf dem Raspi einloggen will noch kein SSH-Schlüsselpaar liegen hat, so muss man sich erst mal ein neues SSH-Schlüsselpaar erzeugen.
Ob bereits ein Schlüsselpaar vorhanden ist, kann man einfach überprüfen, indem man sein home-Verzeichnis nach einem .ssh Unterverzeichnis durchsucht.
cd ~
ls -a | grep ssh
Ist das Verzeichnis vorhanden, so sollten sich mindestens folgende Dateien darin befinden (ls .ssh):
id_rsa id_rsa.pub
Ist das nicht der Fall, so kann man gleich ein neues Schlüsselpaar erzeugen:
ssh-keygen -t rsa
Bei der Aufforderung zur Eingabe des Speicherortes und des Passworts einfach Return drücken. Ich habe das mal auf einem frisch aufgesetzten Raspi nachvollzogen:
raspi-ssh-keygen
Und nun gilt es, den public-key (id_rsa.pub) auf den Zielrechner zu bekommen. Und hier kommt bereits das SSHFS zum Einsatz. Ist es noch nicht auf dem Host-Rechner installiert, so kann das ganz einfach über sudo apt-get install sshfs erledigt werden. Nun gilt es noch das Mount-Verzeichnis auf der Host-Seite einzurichten, was der Befehl mkdir <Zielverzeichnis> für uns erledigt. Wer so wie ich mehrere Raspberry-Pis sein Eigen nennt, dem empfehle ich zunächst ein Unterverzeichnis für die Raspberries anzulegen und darunter jedem Raspi sein eigenes Mount-Verzeichnis einzurichten:
mkdir ~/raspberry && cd ~/raspberry
mkdir pi_1 pi_2 pi_n
Nun steht dem SSHFS-Mount nichts mehr im Wege.
sshfs pi@<ip-adresse>:/home/pi ~/raspberry/pi_1
In diesem Fall wird nochmals das Passwort abgefragt, aber mit nachfolgenden Schritten kann das abgestellt werden.
Wenn auf dem Remote-Pi bereits ein .ssh-Verzeichnis im Home-Verzeichnis besteht und in diesem Verzeichnis bereits eine Datei namens authorized_keys liegt, so kann man den neuen Key über folgendes Kommando dazu fügen:
cat ~/.ssh/id_rsa.pub >> ~/raspberry/pi_1/.ssh/authorized_keys
Sollte das .ssh-Verzeichnis im Home-Verzeichnis des „remote-Raspi“ noch nicht existieren, so muss es angelegt werden:
mkdir ~/raspberry/pi_1/.ssh
um anschließend den Public-Key zu kopieren:
cp ~/.ssh/id_rsa.pub ~/raspberry/pi_1/.ssh/authorized_keys
Nun kann der Mount-Point über das Kommando
fusermount -u ~/raspberry/pi_1
ausgehängt werden, um ihn anschließend ohne Angabe des Passwortes wieder einhängen zu können:
sshfs pi@<ip-adresse>:/home/pi ~/raspberry/pi_1
Ich muss wohl kaum erwähnen, dass nun auch bequem über den Dateimanager auf die Files des „remote-Raspies“ zugegriffen werden kann.
Und als kleines Schmankerl kommt nachfolgend noch ein Bash-Script, welches erlaubt, auf einen Rutsch gleich mehrere Raspies zu mounten:

#!/bin/bash

piIpBase=192.168.10.
piIpList="1 2 5"

for piName in $piIpList; do
    ping -c 1 -q $piIpBase$piName
    echo "ping-result: $?"
    if [ $? -eq 0 ]; then
        echo "$piIpBase$piName available - try to mount it."
        sshfs pi@$piIpBase$piName:/home/pi ~/raspberry/pi$piName/
    else
        echo "$piIpBase$piName NOT available!"
    fi
done

Obigen Text einfach in eine Datei speichern (z.B. mount_pi.sh) und nicht vergessen, diese dann ausführbar zu machen:
chmod +x mount_pi.sh
So lassen sich über den Aufruf von mount_pi.sh gleich mehrere (in obigem Fall: drei) RaspberryPies auf einen Rutsch in sein lokales File-System einhängen – vorausgesetzt man hat nicht vergessen die Mount-Verzeichnisse dafür anzulegen.

Auf der Github-Hilfeseite ist auch noch gut beschrieben, wie man sich einen SSH-Key erzeugen kann.