Skip to content

Headless Raspberry Pi für SSH vorkonfigurieren

Hardware Linux Raspberry Pi
tmux via SSH mit 2 seriellen Konsolen (cu) und einem btop auf Raspberry Pi 1+ (32 bit)

Am Wochenende hatte ich da mal wieder so eine Situation, dass ich einen Raspberry Pi headless deployen wollte. Er sollte einen Strauß von USB-serial Adaptern in einem tmux zusammenmuxen. Also nichts, wofür man ein grafische Oberfläche, geschweige denn einen Monitor braucht. Dementsprechend wollte ich nicht mit (noch mehr) Kabeln und Hardware herumjonglieren. Das muss doch auch ohne gehen. Einfach eine vorbereitete SD-Karte reinstopfen und sofort loslegen.

Ja. geht. Und damit ich das nicht wieder vergesse, schreibe ich das hier für die Nachwelt nieder.

Grundsätzlich kann das RaspberryPi OS jede Menge Parameter beim ersten Start übergeben bekommen. Dazu legt man bestimmte Dateien an und/oder befüllt sie mit entsprechenden Werten. Dann gehen die Startup- und Setupskripte diese ab und konfigurieren das System entsprechend.

RaspberryPi OS auf die SD-Karte schreiben

Zuerst ganz normal das Image von raspberrypi.com für das entsprechende Modell und die gewünschte / unterstützte Architektur herunterladen. Dieses Image mit dem Laufwerkabbildschreiber (der unterstützt auch direkt komprimierte Abbilder) oder mit dd auf die SD-Karte schreiben:

$ xzcat 2026-06-18-raspios-trixie-arm64.img.xz | sudo dd of=/dev/sdd bs=100M status=progressCode-Sprache: JavaScript (javascript)

Nach dem Schreiben der SD-Karte kann dessen boot Paritition eingebunden werden. Das ist die kleine FAT-Partition, auf der auch der firmware/config.txt Ordner liegt. Nach dem Flashen sieht der Inhalt in etwa so aus:

 mscholz@picon  ~  ls -lha /boot                                                                                                                                                                                                     ✔  14815:41:41
insgesamt 123M
drwxr-xr-x  3 root root 4,0K  9. Aug 23:16 .
drwxr-xr-x 18 root root 4,0K  9. Aug 17:03 ..
-rw-r--r--  1 root root   92 18. Jun 02:07 cmdline.txt
-rw-r--r--  1 root root 211K  9. Jun 15:55 config-6.18.34+rpt-rpi-v6
-rw-r--r--  1 root root 217K  9. Jun 15:55 config-6.18.34+rpt-rpi-v7
-rw-r--r--  1 root root 249K  9. Jun 15:55 config-6.18.34+rpt-rpi-v8
-rw-r--r--  1 root root 211K 29. Jul 19:19 config-6.18.39+rpt-rpi-v6
-rw-r--r--  1 root root 217K 29. Jul 19:19 config-6.18.39+rpt-rpi-v7
-rw-r--r--  1 root root 249K 29. Jul 19:19 config-6.18.39+rpt-rpi-v8
-rw-r--r--  1 root root   91 18. Jun 02:07 config.txt
drwxr-xr-x  3 root root 5,0K  1. Jan 1970  firmware
-rw-r--r--  1 root root  14M 18. Jun 02:15 initrd.img-6.18.34+rpt-rpi-v6
-rw-r--r--  1 root root  14M 18. Jun 02:15 initrd.img-6.18.34+rpt-rpi-v7
-rw-r--r--  1 root root  15M 18. Jun 02:16 initrd.img-6.18.34+rpt-rpi-v8
-rw-r--r--  1 root root  10M  9. Aug 23:16 initrd.img-6.18.39+rpt-rpi-v6
-rw-r--r--  1 root root  10M  9. Aug 23:14 initrd.img-6.18.39+rpt-rpi-v7
-rw-r--r--  1 root root  10M  9. Aug 23:12 initrd.img-6.18.39+rpt-rpi-v8
lrwxrwxrwx  1 root root   18 18. Jun 02:16 issue.txt -> firmware/issue.txt
lrwxrwxrwx  1 root root   17 18. Jun 02:07 overlays -> firmware/overlays
-rw-r--r--  1 root root   92  9. Jun 15:55 System.map-6.18.34+rpt-rpi-v6
-rw-r--r--  1 root root   92  9. Jun 15:55 System.map-6.18.34+rpt-rpi-v7
-rw-r--r--  1 root root   92  9. Jun 15:55 System.map-6.18.34+rpt-rpi-v8
-rw-r--r--  1 root root   92 29. Jul 19:19 System.map-6.18.39+rpt-rpi-v6
-rw-r--r--  1 root root   92 29. Jul 19:19 System.map-6.18.39+rpt-rpi-v7
-rw-r--r--  1 root root   92 29. Jul 19:19 System.map-6.18.39+rpt-rpi-v8
-rw-r--r--  1 root root 7,5M  9. Jun 15:55 vmlinuz-6.18.34+rpt-rpi-v6
-rw-r--r--  1 root root 7,8M  9. Jun 15:55 vmlinuz-6.18.34+rpt-rpi-v7
-rw-r--r--  1 root root 9,7M  9. Jun 15:55 vmlinuz-6.18.34+rpt-rpi-v8
-rw-r--r--  1 root root 7,5M 29. Jul 19:19 vmlinuz-6.18.39+rpt-rpi-v6
-rw-r--r--  1 root root 7,8M 29. Jul 19:19 vmlinuz-6.18.39+rpt-rpi-v7
-rw-r--r--  1 root root 9,8M 29. Jul 19:19 vmlinuz-6.18.39+rpt-rpi-v8Code-Sprache: CSS (css)

SSH aktivieren

Dieser erste Schritt ist ziemlich einfach. Zum Aktivieren von SSH beim ersten Boot muss lediglich in der boot Partition die Datei „ssh“ erstellt werden, z. B. mit touch.

$ touch ssh

Benutzer anlegen

Benutzer werden in der Datei „userconf.txt“ hinterlegt, zuerst muss man sich aber noch einen Passwort-Hash erstellen. Dafür gibt es mehrere Wege, abhängig davon, welche Tools einem gerade auf dem Rechner zur Verfügung stehen.

Variante 1

openssl passwd -6 -salt <random string> yourpasswordCode-Sprache: HTML, XML (xml)

-1 erstellt ein MD5 Passwort, -5 eins mit SHA256 und -6 mit SHA12.

Diese Variante hat allerdings den „Nachteil“, dass das Passwort im Klartext in der bash/zsh history gespeichert wird.

Variante 2

mkpasswd --method=SHA-512 --stdin

–method kann dabei md5, sha-256 oder sha-512 sein

Diese Variante finde ich am stabilsten, insbesondere, wenn Sonderzeichen im Passwort enthalten sind.

Variante 3

mkpasswd -m sha-512 -S saltsalt -s

-m = Hashmethode, -S salt (8-16 chars), -s Passwort von stdin einlesen

Egal, welche Methode benutzt wurde, anschließend muss der erzeugte Hash, getrennt durch einen Doppelpunkt, hinter den Benutzernamen geschrieben werden. Diese Zeile(n) können nun in die userconf.txt geschrieben werden:

testuser:$6$asdfasdfasj$MIe4pCg08V6pq91o/RpBhMgmK2V6NjXZ7DWuqkrwokv/xGpWVSgJfR5BuRDjNGEr8LDGJW5oAOPq7CVZiv7KA.Code-Sprache: PHP (php)

WiFi konfigurieren (optional)

Ich brauchte in meiner Anwendung jetzt kein WiFi, sondern habe das Gerät mit einem Kabel mit dem Switch verbunden, aber der Vollständigkeit halber:

Hier die wpa_supplicant.conf auf der Boot-Partition erstellen:

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=DE
network={
       ssid="WLAN Name"
       psk="Passwort"
       key_mgmt=WPA-PSK
} Code-Sprache: JavaScript (javascript)

Nun kann die SD-Karte ausgehangen werden. Sicherheitshalber setzte ich dem unmount immer noch ein „sync“ hinterher, was das OS anweist, etwaige Caches auf die Massenspeicher zu schreiben. Wird die SD-Karte nun in den Raspberry Pi gesteckt und eingeschaltet, sollte die Netzwerkverbindung automatisch hergestellt werden und der Login über SSH möglich sein. Dies dauert schon ein paar Minuten, da er im ersten Boot auch erst noch seine Partitionen auf die Größe der SD-Karte vergrößert und danach neu startet.

Nun ist ein sehr guter Moment, seine SSH Pubkeys auf das Gerät zu kopieren und ggf. das Benutzerpasswort wieder zu deaktivieren.

3 Kommentare

  1. Avatar for philipp
    philipp

    @Commander1024 wenn du den rpi imager nutzt, hat der Optionen wie das erste wifi oder einen Useraccount einzurichten auch in der GUI….

    1. Avatar for Сталкер Commander1024

      @eingemaischt @Commander1024@www.commander1024.de Hmm, offensichtlich hab ich den noch nicht benutzt. Aber gut möglich, dass der dann genau das Gleiche macht.

      1. Avatar for dev
        dev

        @Commander1024
        Ja nur einfacher , kenne das aber auch.
        @eingemaischt @Commander1024@www.commander1024.de

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre, wie deine Kommentardaten verarbeitet werden.

Datenschutz-Übersicht

Diese Website verwendet Cookies, damit wir dir die bestmögliche Benutzererfahrung bieten können. Cookie-Informationen werden in deinem Browser gespeichert und führen Funktionen aus, wie das Wiedererkennen von dir, wenn du auf unsere Website zurückkehrst, und hilft unserem Team zu verstehen, welche Abschnitte der Website für dich am interessantesten und nützlichsten sind.