Dieser Artikel gehört zu einer Serie, in der beschrieben wird, wie man einen Raspberry Pi 3 Model B ohne Bildschirm so konfiguriert, dass er ohne MicroSD-Karte direkt von USB bootet.
Im Artikel Raspbian Lite auf USB-Laufwerk übertragen wird erklärt, wie Sie Raspbian Lite von der MicroSD-Karte auf ein USB-Laufwerk übertragen und für den Start vorbereiten können.
In diesem Artikel wird gezeigt, wie Sie die SSH-Host Schlüsseldateien nach dem Kopieren von MicroSD-Karte auf ein USB-Laufwerk neu generieren können.
Die Verschlüsselung einer SSH-Verbindung zwischen PuTTY und dem Raspberry Pi 3 (= Host) erfolgt mit aus Sicherheitsgründen einzigartigen Schlüsseldateien.
Welche Sicherheitsgründe?
Gelangen die SSH-Host Schlüsseldateien in fremde Hände, kann mit ihnen eine mitgeschnittene verschlüsselte SSH-Sitzung inklusive Passwörtern entschlüsselt werden.
Im Folgenden erstmal ein paar Grundlagen zu den SSH-Host Schlüsseldateien.
SSH-Host Schlüsseldateien
Die SSH-Host Schlüsseldateien befinden sich im Verzeichnis /etc/ssh und beginnen mit ssh_host*.
Diese Dateien werden beim ersten Start von Raspbian einmalig automatisch neu generiert. Das passiert zu einem Zeitpunkt an dem Datum und Uhrzeit im Raspberry Pi 3 noch nicht aktualisiert sind, deshalb liegt ihr Erstellungsdatum in der Vergangenheit.
Werden die SSH-Host Schlüsseldateien gelöscht, besteht keine Möglichkeit mehr eine SSH-Verbindung zum Raspberry aufzubauen, weil die Verbindung nicht mehr verschlüsselt werden kann. PuTTY meldet dann bei einem Verbindungsversuch Network Error: Software caused connection abort.
Die SSH-Host Schlüsseldateien werden von Raspbian auch nicht mehr automatisch neu generiert.
Was passiert beim Kopieren mit den SSH-Host Schlüsseldateien?
Im Artikel Raspbian Lite auf USB-Laufwerk übertragen wird gezeigt wie eine laufende Raspbian Installation von MicroSD-Karte auf ein USB-Laufwerk kopiert werden kann. Dabei werden auch die SSH-Host Schlüsseldateien kopiert.
Das geklonte System auf dem USB-Laufwerk hat damit aber nicht mehr einzigartige SSH-Host Schlüsseldateien.
In der englischen Anleitung von raspberry.org, siehe https://www.raspberrypi.org/documentation/hardware/raspberrypi/bootmodes/msd.md (in der Version von Ende März 2017), wurden die SSH-Host Schlüsseldateien nach dem Kopieren von MicroSD-Karte auf ein USB-Laufwerk in dem geklonten System mit den folgenden Anweisungen neu erzeugt.
cd /mnt/target sudo mount --bind /dev dev sudo mount --bind /sys sys sudo mount --bind /proc proc sudo chroot /mnt/target rm /etc/ssh/ssh_host* dpkg-reconfigure openssh-server exit sudo umount dev sudo umount sys sudo umount proc
Alternative 1: SSH-Host Schlüsseldateien manuell neu generieren
Im Prinzip haben Sie aber auch die Möglichkeit nach dem Kopieren von MicroSD-Karte auf USB-Laufwerk die SSH-Host Schlüsseldateien auf der MicroSD-Karte, also im laufenden System manuell neu zu generieren Anschließend haben Sie auch zwei Raspbian Installationen mit einzigartigen SSH-Host Schlüsseldateien.
Mit der folgenden Anweisung löschen Sie die SSH-Host Schlüsseldateien.
sudo rm /etc/ssh/ssh_host_*
Mit der folgenden Anweisung generieren Sie neue einzigartige SSH-Host Schlüsseldateien.
sudo dpkg-reconfigure openssh-server
Beenden Sie PuTTY.
exit
Anschließend starten Sie PuTTY neu und melden sich an Ihrem Raspberry Pi 3 wieder an.
Wenn PuTTY das erste Mal eine SSH-Verbindung zu einem unbekannten System aufbaut oder wenn sich die SSH-Host Schlüsseldateien eines bereits bekannten Systems ändern, erhalten Sie eine Sicherheitswarnung.
Wenn Sie nun von PuTTY eine Sicherheitswarnung erhalten, wurden erfolgreich neue einzigartige SSH-Host Schlüsseldateien erzeugt. Bestätigen Sie sie mit Ja um diese Meldung nicht mehr zu erhalten.
Alternative 2: SSH-Schlüsseldateien automatisch generieren über rc.local
Wie eingangs beschrieben, generiert Raspbian gelöschte SSH-Host Schlüsseldateien nicht automatisch neu.
In die Datei /etc/rc.local können Anweisungen eingetragen werden, die automatisch beim Systemstart ausgeführt werden sollen. Hier kann eine Anweisung hinzugefügt werden, die beim Booten das Vorhandensein von SSH-Host Schlüsseldateien prüft und sie neu erzeugt, falls sie fehlen.
Ändern Sie nach dem Kopieren der MicroSD-Karte auf das USB-Laufwerk die Datei rc.local auf dem USB-Laufwerk mit der folgenden Anweisung.
sudo sed -i '/^exit 0/ i \[ ! -f \/etc\/ssh\/ssh_host_rsa_key \] || \[ ! -f \/etc\/ssh\/ssh_host_dsa_key \] || \[ ! -f \/etc\/ssh\/ssh_host_ecdsa_key \] && dpkg-reconfigure openssh-server\n' /mnt/target/etc/rc.local
Was macht diese Anweisung?
Diese Anweisung fügt auf dem eingehängten USB-Laufwerk /mnt/target in die Datei /etc/rc.local am Ende vor der Anweisung exit 0 die folgende Zeile ein.
[ ! -f /etc/ssh/ssh_host_rsa_key ] || [ ! -f /etc/ssh/ssh_host_dsa_key ] || [ ! -f /etc/ssh/ssh_host_ecdsa_key ] && dpkg-reconfigure openssh-server
Wird rc.local bei einem Neustart ausgeführt, bewirkt diese Anweisung folgendes.
- [ ! -f /etc/ssh/ssh_host_rsa_key ] ||
wenn die Datei /etc/ssh/ssh_host_rsa_key nicht existiert oder - [ ! -f /etc/ssh/ssh_host_dsa_key ] ||
die Datei /etc/ssh/ssh_host_dsa_key nicht existiert oder - [ ! -f /etc/ssh/ssh_host_ecdsa_key ]
die Datei /etc/ssh/ssh_host_ecdsa_key nicht existiert - && dpkg-reconfigure openssh-server
dann generiere die SSH-Host Schlüsseldateien neu
Nun müssen Sie noch die geklonten SSH-Host Schlüsseldateien auf dem USB-Laufwerk löschen.
sudo rm /mnt/target/etc/ssh/ssh_host*
Die Raspbian-Installation auf dem USB-Laufwerk wird nun bei jedem Neustart prüfen, ob eine der SSH-Host Schlüsseldateien
- /etc/ssh/ssh_host_rsa_key,
- /etc/ssh/ssh_host_dsa_key oder
- /etc/ssh/ssh_host_ecdsa_key
nicht vorhanden ist. Falls das zutrifft werden alle fehlenden SSH-Host Schlüsseldateien neu generiert.