Raspberry Zero W


© Februar 2021, letzte Änderung am 21.10.23

Übersicht dieser Seite

Weitere Themen auf anderen Seiten…

Pin-Belegung und Handhabung
Audio-Konfiguration
ZigBee Einrichten

Zum Anfang

Minimal-Installation

Vor langer Zeit habe ich mir mal einen Raspberry für Arme (Zero W) gegönnt.
Aufgrund der geringen Performance (1 GHz single-core CPU und 512 MB RAM),
habe ich gedacht, da braucht man garnicht erst mit einen Desktop anfangen,
sondern fängt gleich mit einer sog. headless Version
(ohne KBD, Maus oder Screen) an.

Raspberry Pi Zero W Spec.

Raspberry Pi Zero 2 W Spec.

Mittlerweile (Dez. 2021) gibt es eine ca. 5 mal leistungfähigere Version.
Leider auch nur mit lächerlichen 512 MB.

Zum Vergleich:
ab ca. 51€ bekommt man Restbestände eines neuen Android 6 Telefon z.B. P8 lite
5" 720 x 1280 IPS-Display, WLAN gn, BT 4.0, NFC, dual SIM 2G 3G, 4G, FM Radio,
8x 1,2 GHz Kirin 620, 2 GB RAM, 16 GB Flash, microSDXC slot,
5 MP Front- & 13 MP Rückkamera, Mikro-USB 2.0, 3,5 mm Audio, GPS, GLONASS, Kompass, Beschleunigungsmesser, 2200 mAh Akku …

Quellen

picockpit.com   Everything about Raspberry Pi Zero 2 W

Zum Anfang

Zum Anfang

headless installation, siehe z.B.

core-electronics.com.au   How To Setup Raspberry Pi Zero W Headless WiFi
howtoraspberrypi.com   How to do a Raspberry Pi headless setup
thedatafrog.com   Raspberry pi Zero W : Headless Install
fambach.net   Raspberry Pi Zero W – Headless Installation
dahlen.org   Raspberry Pi Zero W „headless“ Setup – so geht’s

Basierend auf den oben genannten Artikeln,
kommt eine abgespeckte Betriebssystem-Version
ohne graphisches Desktop zum Einsatz.

Eine entsprechende Version kann ich mir auf der Seite Operating system images
von  raspberrypi.org  runter laden.

Die erste Hürde ist dass die gesuchte Version Raspberry Pi OS Lite
(früher Raspbian Lite) nicht direkt zu finden ist…
Aber unter Raspberry Pi OS (32-bit) findet sich das Gesuchte.

Also habe ich mir  2021-01-11-raspios-buster-armhf-lite.zip
mit den sha256 Hashwert  d49d6fab1b8e533f7efc40416e98ec16019b9c034bc89c59b83d0921c2aefeef
runter geladen.

Mittlerweile (17.10.23) sind wir bei  2023-10-10-raspios-bookworm-armhf-lite.img.xz  angekommen.
Debian 12, alias bookworm, kann mit  xz -d *.xz  entpackt werden.
Aber, nach dem Booten des Headless-Systems kann man sich nicht einloggen.
Mit den  Raspberry Pi Imager erstellen  soll es funktionieren.

Zum Anfang

Image-Check

Zur Überprüfung habe ich bisher immer cfv verwendet, welches ab DEB 10 nicht mehr unterstützt wird.
Man kann sich aber auch wie folgt helfen…

openssl dgst -sha256 2021-01-11-raspios-buster-armhf-lite.zip
SHA256(2021-01-11-raspios-buster-armhf-lite.zip)= d49d…

oder

sha256sum 2021-01-11-raspios-buster-armhf-lite.zip > checksum.txt

sha256sum -c checksum.txt              zum überprüfen der vorher erzeugten Checksumme

Zunächst wird die Zip-Datei entpackt.

unzip 2021-01-11-raspios-buster-armhf-lite.zip

Um das resultierende Image auf den richtigen Datenträger zu schreiben,
sollte mit größter Sorgfalt vorgegangen werden.

Zum Anfang

Datenträger Überprüfung

Für ein Minimal-System sollte eine 8 GB µSD Card reichen.
Da ich nur noch 32 GB µSD Cards habe, ist das mehr als ausreichend.
Zunächst stecke ich eine SD Card an mein DEB 10 System und überprüfe,
ob ich den möglichen Inhalt unwiederbringlich löschen kann.
Hat man auf den Datenträger zugegriffen (z.B. via Thunar),
ist es wichtig diesen wieder zu unmounten, aber nicht komplett raus zu werfen (eject).
Falls es nicht klappen sollte, kann man auch physikalisch raus ziehen und wieder rein stecken,
aber nicht darauf zugreifen.

Nun gibt es verschiedene Möglichkeiten der Bestandsaufnahme…

su
/usr/sbin/fdisk -l
Disk /dev/nvme0n1: 447.1 GiB, 480103981056 bytes, 937703088 sectors
Disk model: Force MP510                             
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xce4e563b

Device         Boot    Start       End   Sectors   Size Id Type
/dev/nvme0n1p1          2048  58593279  58591232    28G 83 Linux
/dev/nvme0n1p2      58595326 937701375 879106050 419.2G  5 Extended
/dev/nvme0n1p5      58595328  92008447  33413120    16G 82 Linux swap / Solaris
/dev/nvme0n1p6      92010496 937701375 845690880 403.3G 83 Linux

Disk /dev/sda: 2.7 TiB, 3000592982016 bytes, 5860533168 sectors
Disk model: ST3000VN000-1HJ1
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 0AC13387-871C-C046-8599-B5C3E247998A

Device        Start        End    Sectors  Size Type
/dev/sda1      2048   41945087   41943040   20G Linux filesystem
/dev/sda2  41945088   75499519   33554432   16G Linux swap
/dev/sda3  75499520 5860533119 5785033600  2.7T Linux filesystem

Disk /dev/sdb: 29.3 GiB, 31439454208 bytes, 61405184 sectors
Disk model: Storage Device  
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000

Device     Boot Start      End  Sectors  Size Id Type
/dev/sdb1        8192 61405183 61396992 29.3G  c W95 FAT32 (LBA)

Alternativ kann man auch nach der letzten Aktion (rein stecken der µSD-Card) suchen.

su
ls -ltr /dev/*
…
lrwxrwxrwx 1 root root  6 Feb 14 00:11 8:16 -> ../sdb
lrwxrwxrwx 1 root root  7 Feb 14 00:11 8:18 -> ../sdb2
lrwxrwxrwx 1 root root  7 Feb 14 00:11 8:17 -> ../sdb1

Auf meinen DEB 10 ist offensichtlich die µSD Card unter  /dev/sdb  zu finden.
Entsprechend sieht ein Parameter  of=/dev/sdb  für den DiskDump-Befehl aus.

su
dd bs=1M if=2021-01-11-raspios-buster-armhf-lite.img of=/dev/sdb status=progress
sync                                   Warten bis sync eingeben werden kann

Eigentlich sollte sync reichen, um das nun geänderte Dateisystem sehen zu können.
Wer sicher gehen möchte, zieht die µSD-Card einmal raus und steckt sie wieder ein
(bei Windows unumgänglich).

Mit fdisk kann man sich erneut den Dateträger angucken.

su
/usr/sbin/fdisk -l
…
Device     Boot  Start     End Sectors  Size Id Type
/dev/sdb1         8192  532479  524288  256M  c W95 FAT32 (LBA)
/dev/sdb2       532480 3637247 3104768  1.5G 83 Linux

Die erste Partition ist von Windows sichtbar und ist ungeschützt (da FAT32) und enthält die Konfigurationen.
Auf der 2. Partition befindet sich das Raspberry OS.

Alles dahinter (ca. 30 GB) ist zur Zeit ungenutzt…
und kann mit  Gparted  nutzbar gemacht werden.

Um ssh nutzen zu können, ist es nötig eine Datei Namens ssh
in der Boot-Partition (FAT32) zu erzeugen.
Am einfachsten realisierbar ist das z.B. indem man mit Thunar boot aufruft
und über den Dialog   File > Create Document > empty File > ssh   die fehlende Datei erzeugt.

Hat man vergessen die Datei  ssh  anzulegen, kommt man nicht weit.

ssh -X pi@audio01.fritz.box
ssh: connect to host audio01.fritz.box port 22: No route to host

Um über das Wlan erreichbar zu sein, ist noch eine weitere Datei auf der Boot-Partition (FAT32) nötig.
In  wpa_supplicant.conf  wird ein vergleichbarer Text, wie folgender, rein kopiert.
Anbei ein Beispiel mit den Editor nano.

nano /media/a1/boot/wpa_supplicant.conf     oder bootfs

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
country=DE
network={
   ssid="network_name"
   psk="network_password"
   key_mgmt=WPA-PSK
}

Nach dem Booten, befindet sich diese Datei nicht mehr auf dem Boot-Laufwerk,
sondern in einen geschützten Ordner auf der rootfs-Partition
unter /media/a1/rootfs/etc/wpa_supplicant/wpa_supplicant.conf

Die erste Meldung bei korrekter Konfiguration könnte wie folgt aussehen.

ssh pi@audio02.fritz.box
The authenticity of host 'audio02.fritz.box (2a01:c23:8c14:…)' can't be established.
ECDSA key fingerprint is SHA256:BftMMeAzsXFOffy3Qkyd1V/W573ikZ1LMasOhRnI7S7.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'audio02.fritz.box,2a01:c23:48c1:…' (ECDSA) to the list of known hosts.
Please note that SSH may not work until a valid user has been set up.

See http://rptl.io/newuser for details.
Enter passphrase for key '/home/a1/.ssh/id_rsa': 

Zum Anfang

Hostname ändern

Nun kann man noch den Hostnamen ändern.
Das ist zum Einen nötig, wenn es bereits einen weiteren Raspberry im Netz gibt
und zum Anderen auch sinnvoll, da das erste Lebenszeichen vom Raspberry
mit bekannten Benutzer pi und bekannten Passwort raspberry erfolgt.

Um zu /etc/hostname gelangen zu können,
mounte ich im einfachsten Fall rootfs via Thunar
und kann dann auf der Konsole fortfahren.

cd /media/a1/rootfs/etc/
ls -la host*
-rw-r--r-- 1 root root   9 Dec  9 23:40 host.conf
-rw-r--r-- 1 root root  12 Jan 11 13:52 hostname
-rw-r--r-- 1 root root 132 Jan 11 13:52 hosts
-rw-r--r-- 1 root root 411 Jan 11 13:54 hosts.allow
-rw-r--r-- 1 root root 711 Jan 11 13:54 hosts.deny

su
nano hostname

audio01

nano hosts

127.0.0.1       localhost
::1             localhost ip6-localhost ip6-loopback
ff02::1         ip6-allnodes
ff02::2         ip6-allrouters
127.0.1.1       audio01

In meinen Fall habe ich raspberrypi umbenannt in audio01,
da ich den Raspberry lediglich zum Musik abspielen benötige.
Bitte daran denken, ein gültiger Hostname ist beschränkt auf Buchstaben, Zahlen und dem Sonderzeichen "-".

Wenn alles erledigt ist, kann ich in der Konsole vom externen Laufwerk verschwinden
indem ich z.B. cd /media/ eingebe.
Danach sollte es kein Problem sein die µSD-Card raus zu werfen und in den Raspberry zu stecken.

Zum Anfang

µ-SD-Card mit den Raspberry Pi Imager erstellen

Zunächst muß der Raspberry Pi Imager installiert werden.
Dafür kann man sich die aktuellste Version unter  raspberrypi.com  runter laden.
In meinen Fall war es folgende Datei, welche ich installiert und danach gestartet habe.
Danach geht es grafisch weiter.

sudo dpkg -i imager_1.7.5_amd64.deb

Nach dem Aufruf von  sudo rpi-imager  erscheint eine grafische Oberfläche.
Hier wähle ich zunächst das Betriebssystem aus,
indem ich auf die Fläche  Choose OS  klicke.

Raspberry Pi Imager

Da ich einen Raspberry Zero W benutzen möchte, ist zum einen ein 32-bit OS nötig
und zum anderen die Headless-Version.

Raspberry Pi OS (other)

Ohne Desktop ist die Version  Raspberry Pi Os Lite.

Raspberry Pi OS Lite (32-bit)

Dann muß noch das Speichermedium ausgewählt werden.
Bitte genau überprüfen, das auch das richtige Medium überschrieben wird.

Raspberry Pi Imager - µSD-Card

Dann ist es noch wichtig vorher auf das Zahnradsymbol zu gehen.
Hier stelle ich ein ob SSH möglich ist, wie die WLAN SSID lautet, Passwörter, etc.

Raspberry Pi Imager - advanced options

Vor dem unwiederbringlichen Überschreiben, wird man noch einmal gewarnt.

Raspberry Pi Imager - warnung

Nach Eingabe des Administarion-Passwortes, wird der Datenträger beschrieben,
überprüft und zum Abschluss erfolgt hoffentlich eine Erfolgsmeldung.

Raspberry Pi Imager - SD can be removed

Zum Anfang

Raspberry booten & remote einloggen

Ob der Raspberry lebt, kann man an einer LED erkennen.
So lange sie noch flackert, ist der Raspberry noch beschäftigt…

Aus der Ferne einloggen, geht wie folgt:

ssh pi@audio01.fritz.box
The authenticity of host 'audio01.fritz.box (192.168.178.50)' can't be established.
ECDSA key fingerprint is SHA256:S2l2CjHH9424eTHm8Kzc7K/E7vR2xOHxRCNBfaYOA3E.
Are you sure you want to continue connecting (yes/no)? Yes
Warning: Permanently added 'audio01.fritz.box,192.168.178.50' (ECDSA) to the list of known hosts.
Enter passphrase for key '/home/a1/.ssh/id_rsa':      Return
pi@audio01.fritz.box's password:                      raspberry

Beim Einloggen kann man das RSA-Passwort erst einmal mit Return überspringen,
da das auf dem Raspberry noch nicht aktiv ist.
Nach Eingabe des Passwortes raspberry
sollte als erste Amtshandlung das Passwort geändert werden.

Direkt Einloggen

Hat man Probleme, ist es nötig via HDMI einen Monitor
und via 2. USB-Port (mittig) eine USB-Tastertur anzuschließen.

Als Versorgung bietet sich es sich an, einen extern versorgten USB-Hub zu verwenden.
z.B. reichelt.de   LOGILINK UA0096 USB 2.0 Hub 10-Port mit Netzteil (5V @ 3,5A)
Über den Hub kann man dann die Tastatur anschließen ohne dass es den Raspberry belastet.

Um Daten mit den Hub austauschen zu können, ist noch ein sog. OTG-Kabel nötig.
z.B. reichelt.de   OTG Kabel USB Micro B Stecker auf USB 2.0 A Buchse.

Vom USB-Hub wird der Raspberry via micro USB Buchse (am Rand) mit 5V Power versorgt.
Dafür ist auch noch ein Kabel nötig…
z.B. reichelt.de   GOOBAY 77527 Sync- & Ladekabel, USB-A -> micro USB, 1 m

Für den Monitor ist noch ein Adapterkabel nötig.
z.B. reichelt.de   VALUE 12993120 Adapterkabel, HDMI Buchse auf HDMI Mini Stecker.

Tipp: Auch wenn die Adapterkabel teuer sind als ein Adapter,
bevorzuge ich diese, da es weniger Platzprobleme gibt
und aufgrund der Flexibilität die Querkräfte nicht so gross sind.

Falls das Passwort raspberry nicht angenommen wird,
ist unter Umständen das amerikanische Tastertur-Layout aktiv.
Durch Eingabe von raspberrz sollte es dann funktionieren…

Zum Anfang

Passwort ändern

passwd
Changing password for pi.
Current password:                      raspberry
New password:                          nochgeheimer
Retype new password:                   nochgeheimer
passwd: password updated successfully

Grund-Konfiguration

Mit den Raspberry Pi Software Configuration Tool raspi-config
kann ich per Dialog die wichtigsten Dinge einstellen.

sudo raspi-config

Zur Einordnung der Themen, die Überschriften mit einer engl. Kurzbeschreibung

  1. System Options: SSID, Audio via HDMI or jack, password, hostname, desktop or CLI boot,
    wait time for network, LED behaviour, etc.
  2. Display Options: resolution, underscan, pixeldoubling, screen blanking
  3. Interface Options: camera, ssh, vnc, spi, i2c, serial port, 1-wire, remote GPIO
  4. Performance Options: overclock, GPU memory, ro file-system, GPIO fan
  5. Localisation Options: language, timezone, keyboard, WLAN country set
  6. Advanced Options: expand filesystem, GL driver, compositor, network interface names, proxy settings
  7. Update: update this tool
  8. About

Von den oben genannten Möglichkeiten, habe ich folgende genutzt:

5 - Localisation Options > L1 - language > de_DE.UTF-8 UTF-8 (space wählt aus)

5 - Localisation Options > L2 - timezone > Europe > Berlin

5 - Localisation Options > L3 - keyboard > generic 105-key PC (intl.) > other > German > QWERTY
  > AltGr = default > compose key - no key

5 - Localisation Options > L4 - WLAN country set > DE

Am Ende des Dialoges wurde neu gebootet.

Zum Anfang

update & upgrade

Alle paar Wochen spätestens, sollte man gucken ob Sicherheits-Updates zur Verfügung stehen.

sudo apt update
…
E: Release file for http://raspbian.raspberrypi.org/raspbian/dists/buster/InRelease 
is not valid yet (invalid for another 35d 2h 41min 30s). 
Updates for this repository will not be applied.

Zunächst wollte ich schreiben
"Leider bekommme ich zur Zeit Fehlermeldungen und kann das Update nicht ausführen"…
Ursache war die nicht richtig eingestellte Zeit…

sudo date -s "22 Feb 2021 09:28"

sudo apt update
Get:1 http://raspbian.raspberrypi.org/raspbian buster InRelease [15.0 kB]
Get:2 http://archive.raspberrypi.org/debian buster InRelease [32.9 kB]
Get:3 http://packages.microsoft.com/repos/code stable InRelease [10.4 kB]   
Get:4 http://raspbian.raspberrypi.org/raspbian buster/main armhf Packages [13.0 MB]
Get:5 http://archive.raspberrypi.org/debian buster/main armhf Packages [372 kB]
Get:6 http://packages.microsoft.com/repos/code stable/main armhf Packages [25.8 kB]
Get:7 http://packages.microsoft.com/repos/code stable/main arm64 Packages [25.9 kB]
Get:8 http://packages.microsoft.com/repos/code stable/main amd64 Packages [25.2 kB]
Fetched 13.5 MB in 28s (478 kB/s)                                              
Reading package lists... Done
Building dependency tree       
Reading state information... Done
53 packages can be upgraded. Run 'apt list --upgradable' to see them.

Warum auch Microsoft dabei sein soll, muss ich noch einmal rausbekommen…
Die folgenden 786 Zeilen habe ich etwas eingekürzt…

sudo apt upgrade
sudo apt upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
The following packages will be upgraded:
  alsa-utils apt apt-utils avahi-daemon base-files bind9-host curl groff-base
  iputils-ping libapt-inst2.0 libapt-pkg5.0 libavahi-common-data
  libavahi-common3 libavahi-core7 libbind9-161 libbsd0 libcurl4
  libdns-export1104 libdns1104 libisc-export1100 libisc1100 libisccc161
  libisccfg163 libldap-2.4-2 libldap-common liblwres161 libpam-systemd
  libpython3.7 libpython3.7-minimal libpython3.7-stdlib libraspberrypi-bin
  libraspberrypi-dev libraspberrypi-doc libraspberrypi0 libssl1.1 libsystemd0
  libudev1 libzstd1 openssh-client openssh-server openssh-sftp-server openssl
  python3.7 python3.7-minimal raspberrypi-bootloader raspberrypi-kernel
  raspberrypi-sys-mods rpi-eeprom ssh systemd systemd-sysv udev wpasupplicant
53 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
Need to get 142 MB of archives.
After this operation, 4,871 kB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 http://archive.raspberrypi.org/debian buster/main armhf libssl1.1 armhf 1.1.1d-0+deb10u6+rpt1 [1,277 kB]
Get:2 http://mirror.netzwerge.de/raspbian/raspbian buster/main armhf base-files armhf 10.3+rpi1+deb10u9 [70.1 kB]
…
Fetched 142 MB in 1min 19s (1,792 kB/s)
Reading changelogs... 83%
Reading changelogs... Done
Extracting templates from packages: 100%
Preconfiguring packages .........................................................] 
(Reading database ... 40634 files and directories currently installed.)
Preparing to unpack .../base-files_10.3+rpi1+deb10u9_armhf.deb ...
Unpacking base-files (10.3+rpi1+deb10u9) over (10.3+rpi1+deb10u8) ...
Setting up base-files (10.3+rpi1+deb10u9) ...
Installing new version of config file /etc/debian_version ...
…
dpkg: warning: unable to delete old directory '/etc/resolvconf/update-libc.d': Directory not empty
dpkg: warning: unable to delete old directory '/etc/resolvconf': Directory not empty
…
Adding 'diversion of /boot/kernel.img to /usr/share/rpikernelhack/kernel.img by rpikernelhack'
…
Removing 'diversion of /boot/kernel.img to /usr/share/rpikernelhack/kernel.img by rpikernelhack'
…

Wer ein wenig aufräumen möchte und überflüssige Pakete entfernen möchte,
den kann ich folgende Seiten empfehlen:
blog.wenzlaff.de   Wie werden alle installierten Packages auf dem Raspberry Pi angezeigt,
  gespeichert und gezählt?

Siehe auch
raspberrypi.com   Raspberry Pi OS - Updating and Upgrading Raspberry Pi OS

Listet was alles installiert ist…

dpkg --get-selections | grep -v deinstall > inst-packages.txt

Zum Anfang

Firmware Update

Um die Stabilität und Firmware-Fehler zu beheben,
würde ich die Firmware ebenso aktualisieren.

sudo apt-get install rpi-update
sudo rpi-update
sudo  rpi-update
 *** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom
 *** Performing self-update
 *** Relaunching after update
 *** Raspberry Pi firmware updater by Hexxeh, enhanced by AndrewS and Dom
 *** We're running for the first time
 *** Backing up files (this will take a few minutes)
 *** Backing up firmware
 *** Backing up modules 5.10.63+
#############################################################
WARNING: This update bumps to rpi-5.10.y linux tree
See: https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=288234
'rpi-update' should only be used if there is a specific
reason to do so - for example, a request by a Raspberry Pi
engineer or if you want to help the testing effort
and are comfortable with restoring if there are regressions.

DO NOT use 'rpi-update' as part of a regular update process.

##############################################################
Would you like to proceed? (y/N)       y
 *** Downloading specific firmware revision (this will take a few minutes)
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   173  100   173    0     0    183      0 --:--:-- --:--:-- --:--:--   183
100  121M  100  121M    0     0   428k      0  0:04:51  0:04:51 --:--:--  903k
 *** Updating firmware
 *** Updating kernel modules
 *** depmod 5.10.90-v7l+
 *** depmod 5.10.90+
 *** depmod 5.10.90-v7+
 *** depmod 5.10.90-v8+
 *** Updating VideoCore libraries
 *** Using HardFP libraries
 *** Updating SDK
 *** Running ldconfig
 *** Storing current firmware revision
 *** Deleting downloaded files
 *** Syncing changes to disk
 *** If no errors appeared, your firmware was successfully updated to e4c0a4d6f5343d5debf8dbc1966f046541572ffd
 *** A reboot is needed to activate the new firmware

sudo reboot

Zum Anfang

SSH absichern

Um Script-Kiddies (und andere Vandalen ;-) fern zu halten, kann ich nur empfehlen,
remote Verbindungen zusätzlich abzusichern.

Public Key

Eigentlich habe ich das bereits beschrieben. Siehe Zugriffseinschränkungen des SSH-Servers.

In Kurzform:

Auf dem Gastsystem (remote Computer) ein Schlüsselpaar erzeugen.
Den öffentlichen Schlüssel zum Host (hier: headless Raspberry) kopieren.
Auf dem Raspberry nur noch Zugriff mit Schlüssel erlauben.

ssh-keygen -t rsa                                auf dem Gastsystem
cd /home/m/.ssh/
mv id_rsa.pub b41_m.pub                          Gastsystem: b41   Benutzer: m
scp b41_m.pub pi@audio01.fritz.box:/home/pi/
Enter passphrase for key '/home/a1/.ssh/id_rsa': Enter 
pi@audio01.fritz.box's password:                 Passwort
b41_m.pub    100%  732    78.1KB/s   00:00

Danach sich auf den Raspberry einloggen,
Ordner .ssh erzeugen und Key hinein schieben und…
ssh Konfiguration ändern.

ssh pi@audio01.fritz.box                         einloggen
mkdir .ssh                                       Ordner erzeugen
chmod 700 .ssh
mv b41_a1.pub .ssh
cd .ssh
cat b41_m.pub >> authorized_keys                 public key hinzufügen
chmod 600 authorized_keys
chmod 600 b41_m.pub                              nur noch pi sichtbar

sudo nano /etc/ssh/sshd_config                   auf dem Raspberry

PermitRootLogin no                               # -> kein root-login erlauben
PasswordAuthentication no                        # geändert, de-aktiviert
UsePAM no                                        # geändert, de-aktiviert

/etc/init.d/ssh restart                          und Neustart vom SSH-Daemon
[....] Restarting ssh (via systemctl): ssh.service==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to restart 'ssh.service'.
Authenticating as: ,,, (pi)
Password:                                        geheim
==== AUTHENTICATION COMPLETE ===
. ok 

Testergebnis von einen nicht authorisierten Computer sieht wie folgt aus.
Und ein erfolgreiches Login (von einen 2. Terminal) sieht wie folgt aus.
Sollte der zweite Versuch misslingen, kann ich im 1. Terminal noch alles rückgängig machen…

ssh pi@audio01.fritz.box
pi@audio01.fritz.box: Permission denied (publickey).

ssh pi@audio01.fritz.box
Enter passphrase for key '/home/a1/.ssh/id_rsa': 
Last login: Sun Jan 17 05:32:50 2021 from 192.168…

Zum Anfang

fail to ban

Um die Anzahl der Login-Versuche ein zu schränken bietet sich fail2ban an.
Siehe fail2ban.
Speziell bei Rechnern, welche sich im WLAN befinden, ist das angebracht…

In Kurzform:

sudo apt install fail2ban

sudo nano /etc/fail2ban/jail.local

# 21.02.21
[sshd]
enabled = true
[DEFAULT]
maxretry = 3                                     # statt maxretry = 5

sudo systemctl restart fail2ban                  neue Konfig. übernehmen

Zum Anfang

Zeit richtig einstellen

Da der Rasperry keine eigene sogenannte RTC - real time clock
(ein spezieller Batterie gepufferter Uhrenchip, wo die Uhr in Hardware realisiert ist) hat,
sondern über Timer-Interrupts seine aktuelle Zeit per Software sich errechnet,
ist diese nicht sonderlich genau.

Um trotzdem eine verlässliche Zeitbasis zu haben, bietet es sich an,
sich ein Zeitnormal aus dem Internet zu holen.
Falls man nicht bereits über raspi-config die Zeitzone auf Berlin eingestellt,
hat sollte man das jetzt tun.

sudo dpkg-reconfigure tzdata

Zeitzone einstellen mit tzdata
Europe
Zeitzone einstellen mit tzdata
Berlin
Zum Abschluss gibt es noch eine kleine Meldung auf dem Schirm…

Current default time zone: 'Europe/Berlin'
Local time is now:      Fri Mar  5 19:20:14 CET 2021.
Universal Time is now:  Fri Mar  5 18:20:14 UTC 2021.

Das Problem ist nun, dass nach dem Einschalten weder Datum noch Zeit stimmt.
Hat man beides manuell via date eingestellt, ist die innere Uhr recht genau (20:55 gestartet).
Aber eine manuelle Einstellung ist nicht das Ziel.

date 02192015                          Notation: date MMTThhmm
                                       ca. 2 Wochen später…
uptime
 20:55:25 up 17 days, 20:15,  1 user,  load average: 0.00, 0.01, 0.00

Nachdem die Zeitzone stimmt, kann man ntp installieren und konfigurieren.
Default-Einstellung ist: pool 0.debian.pool.ntp.org iburst….
Da bei mir die FB ein raus telefonieren verhindert, steht sie selber als Zeitserver zur Verfügung
und muss stattdessen eingetragen werden.

sudo apt install ntp
sudo nano /etc/ntp.conf                # /etc/ntpsec/ntp.conf
…
# pool: 
server 192.168.178.1 iburst            # fritz.box
# pool 0.debian.pool.ntp.org iburst
…

sudo date -s "Mar 11 18:29"            in englischer Schreibweise

Bevor ich den ntp-Dienst starte, habe ich noch die Zeit absichtlich falsch gestellt.

sudo service ntp restart
uptime
 19:33:30 up 23 days, 18:53,  1 user,  load average: 0.13, 0.11, 0.09

sudo shutdown -h 0

Als Überprüfung habe ich den Raspberry runter gefahren, ausgeschaltet und wieder eingeschaltet.
Vom Befehl bis die LED am Raspberry aus geht, vergehen fast 15 Sekunden.

ssh pi@audio01.fritz.box
Enter passphrase for key '/home/a1/.ssh/id_rsa': 
Last login: Sun Jan 17 05:43:59 2021 from 192.168.178.35
pi@audio01:~ $ uptime
 19:45:17 up 2 min,  1 user,  load average: 0.20, 0.32, 0.14

Zum Anfang

Quellen

raspberrypi.org   Securing your Raspberry Pi
raspberrypi.org   Python
computerhilfen.de   Raspberry Pi Zero W: Ohne Monitor einrichten – WLAN und SSH aktivieren
kofler.info   Raspberry Pi Zero W ausprobiert
pi-buch.info   Geänderte SSH-Server-Konfiguration von Raspbian
datenreise.de   Bash: Update-Script für NO-IP.com (DynDNS)
dahlen.org   Kostenlose TLS/SSL-Zertifikate durch eigene CA erstellen (Teil 1: Grundlagen)
tutorials-raspberrypi.de   Raspberry Pi SSL Zertifikat kostenlos mit Let’s Encrypt erstellen
antary.de   Raspberry Pi Installation und Betrieb von Wireguard
couchpirat.de   Alles rund um den beliebten Bastelrechner Raspberry Pi
antary.de   Raspberry Pi Installation und Betrieb von Wireguard
bitreporter.de   Raspberry Pi: Temperatur auslesen und aufzeichnen
pragmaticlinux.com   Check the Raspberry PI CPU temperature
https://www.elektronik-kompendium.de/sites/raspberry-pi/2002041.htm
https://www.etechnophiles.com/rpi-zero-2w-board-layout-pinout-specs-price/

Zum Anfang