Linux · Raspberry Pi · SSH
SSH-Key auf Windows, Tablet und Raspberry Pi einrichten
SSH-Schlüssel wirken am Anfang wie dunkle Konsolenmagie. Tatsächlich ist das Prinzip einfach: Der private Schlüssel bleibt auf dem eigenen Gerät, der öffentliche Schlüssel kommt auf jene Geräte, auf die man sich anmelden möchte.
Inhalte
1. Grundprinzip: privater und öffentlicher Schlüssel
Ein SSH-Key besteht immer aus zwei Teilen: einem privaten Schlüssel und einem öffentlichen Schlüssel.
Privater Schlüssel
Der private Schlüssel bleibt ausschließlich auf dem eigenen Gerät, also zum Beispiel auf dem Stand-PC, Laptop oder Tablet. Er ist der eigentliche Haustürschlüssel und darf nicht weitergegeben oder auf fremde Geräte kopiert werden.
~/.ssh/id_ed25519
Öffentlicher Schlüssel
Der öffentliche Schlüssel darf auf Zielgeräte kopiert werden, etwa auf einen Raspberry Pi, einen Server oder ein anderes Linux-System mit SSH-Zugang.
~/.ssh/id_ed25519.pub
Auf dem Zielgerät wird dieser öffentliche Schlüssel in die Datei
authorized_keys eingetragen:
~/.ssh/authorized_keys
Diese Datei ist gewissermaßen die Gästeliste des Zielsystems. Jeder dort eingetragene öffentliche Schlüssel darf sich anmelden, sofern der passende private Schlüssel auf dem Client vorhanden ist.
2. Braucht jedes Remote-Gerät einen eigenen Schlüssel?
Nicht zwingend. Sinnvoll ist meist folgende Regel:
Ein Client-Gerät = ein eigenes Schlüsselpaar.
Ein Remote-Gerät = enthält die erlaubten öffentlichen Schlüssel.
Beispiel:
- Der Stand-PC hat seinen eigenen privaten und öffentlichen Schlüssel.
- Das Tablet hat ebenfalls seinen eigenen privaten und öffentlichen Schlüssel.
- Der Raspberry Pi enthält in
authorized_keysbeide öffentlichen Schlüssel.
Dadurch können sich sowohl Stand-PC als auch Tablet am Raspberry Pi anmelden, ohne dass private Schlüssel zwischen Geräten herumkopiert werden müssen.
3. Prüfen, ob auf Windows bereits ein SSH-Key vorhanden ist
Unter Windows funktioniert der Linux-Befehl ls -la in der klassischen PowerShell
nicht wie erwartet. PowerShell kennt zwar ls als Alias, aber nicht die Linux-Option
-la.
Der Versuch führt daher zu einer Fehlermeldung wie:
Get-ChildItem : Es wurde kein Parameter gefunden,
der dem Parameternamen "la" entspricht.
Stattdessen verwendet man unter Windows PowerShell:
dir $env:USERPROFILE\.ssh
Oder gezielt für ED25519-Schlüssel:
dir $env:USERPROFILE\.ssh\id_ed25519*
Wenn Dateien wie diese vorhanden sind, existiert bereits ein SSH-Key:
id_ed25519
id_ed25519.pub
Der öffentliche Schlüssel kann mit folgendem Befehl angezeigt werden:
cat ~/.ssh/id_ed25519.pub
Die Ausgabe sieht ungefähr so aus:
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA... benutzer@example.com
Diese Zeile darf auf das Zielgerät kopiert werden. Der private Schlüssel
id_ed25519 bleibt dagegen auf dem Windows-PC.
4. Verbindung zum Raspberry Pi testen
Wenn der Raspberry Pi im Netzwerk unter dem Hostnamen sailsense.local erreichbar ist
und der Benutzer user heißt, lautet der SSH-Befehl:
ssh user@sailsense.local
Beim ersten Verbindungsaufbau erscheint normalerweise eine Meldung wie:
The authenticity of host 'sailsense.local' can't be established.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
Diese Meldung bedeutet: Der Computer kennt dieses Zielgerät noch nicht. Wenn man sicher ist, dass es sich um den eigenen Raspberry Pi handelt, bestätigt man mit:
yes
Danach wird der Raspberry Pi in die Datei known_hosts eingetragen.
Wenn anschließend noch nach dem Passwort gefragt wird, ist der SSH-Key noch nicht richtig eingerichtet oder wird vom Raspberry Pi noch nicht akzeptiert.
5. Öffentlichen Schlüssel auf dem Raspberry Pi eintragen
Auf dem Raspberry Pi muss der öffentliche Schlüssel des Windows-PCs oder Tablets in die Datei
authorized_keys eingetragen werden.
Zuerst am Raspberry Pi einloggen:
ssh user@sailsense.local
Dann das SSH-Verzeichnis anlegen beziehungsweise absichern:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
Nun die Datei authorized_keys öffnen:
nano ~/.ssh/authorized_keys
Dort wird der öffentliche Schlüssel eingefügt. Eine solche Datei kann zum Beispiel so aussehen:
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA... standpc@example.com
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAA... [tablet@example.com](mailto:tablet@example.com)
Wichtig: Jeder öffentliche Schlüssel steht in einer eigenen Zeile.
Danach werden die Dateirechte gesetzt:
chmod 600 ~/.ssh/authorized_keys
~/.ssh
Ein häufiger Fehler ist dieser Befehl:
chmod 600 ~/.ssh
Das sieht harmlos aus, ist aber falsch. ~/.ssh ist ein Ordner. Ein Ordner braucht
Ausführungsrechte, damit er betreten werden kann. Ohne dieses Recht kann SSH die Datei
authorized_keys nicht zuverlässig lesen.
Die Folge kann eine merkwürdige Ausgabe sein:
ls: cannot access '/home/user/.ssh/authorized_keys': Permission denied
d????????? ? ? ? ? ? .
-????????? ? ? ? ? ? authorized_keys
Das bedeutet sinngemäß: Das System sieht, dass dort etwas liegt, darf aber nicht sauber darauf zugreifen. SSH fällt dann auf die Passwortabfrage zurück.
Die korrekten Rechte lauten:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
Zusätzlich kann man sicherstellen, dass der Benutzer auch wirklich Eigentümer der Dateien ist:
chown -R user:user ~/.ssh
Danach sollte die Kontrolle so aussehen:
ls -la ~/.ssh
Erwartete Ausgabe:
drwx------ 2 user user 4096 ... .
drwx------ 7 user user 4096 ... ..
-rw------- 1 user user 211 ... authorized_keys
Merksatz:
.ssh → 700
authorized_keys → 600
7. Warum fragt SSH trotz eingetragenem Schlüssel noch nach dem Passwort?
Wenn SSH weiterhin nach dem Passwort fragt, obwohl der öffentliche Schlüssel eingetragen wurde, kommen meist diese Ursachen infrage:
- Die Rechte von
~/.sshoderauthorized_keyssind falsch. - Der öffentliche Schlüssel wurde in die falsche Benutzerkennung eingetragen.
- Der eingetragene öffentliche Schlüssel passt nicht zum privaten Schlüssel des Client-Geräts.
- Der SSH-Client verwendet einen anderen Schlüssel als erwartet.
- Der Inhalt von
authorized_keyswurde beschädigt, etwa durch Zeilenumbrüche mitten im Schlüssel.
Wichtig ist besonders der Benutzername. Wer sich so verbindet:
ssh user@sailsense.local
muss den Schlüssel hier eintragen:
/home/user/.ssh/authorized_keys
Würde man sich als pi anmelden, müsste der Schlüssel stattdessen in:
/home/pi/.ssh/authorized_keys
SSH ist hier pedantisch. Verschiedene Benutzer sind verschiedene Türen.
8. Verbindung mit Debug-Ausgabe prüfen
Wenn unklar ist, welcher Schlüssel verwendet wird, hilft die Debug-Ausgabe:
ssh -v user@sailsense.local
Interessant sind Zeilen wie:
Offering public key: C:\Users\julka\.ssh\id_ed25519
Das bedeutet: Der Client bietet diesen Schlüssel an.
Ideal wäre danach eine Meldung wie:
Server accepts key
Wenn der Schlüssel angeboten, aber nicht akzeptiert wird, liegt das Problem fast immer auf dem Zielgerät: falscher Eintrag, falscher Benutzer, falsche Rechte oder falscher Besitzer.
Man kann einen bestimmten Schlüssel auch ausdrücklich angeben:
ssh -i $env:USERPROFILE\.ssh\id_ed25519 user@sailsense.local
9. SSH-Key vom Tablet auf den Raspberry Pi einrichten
Auf einem Tablet hängt die genaue Vorgehensweise vom System ab. Unter Android wird häufig Termux verwendet. Dort kann man wie unter Linux arbeiten.
Zuerst prüfen, ob schon ein Schlüssel vorhanden ist:
ls -la ~/.ssh
Falls noch kein Schlüssel vorhanden ist, erzeugt man einen neuen:
ssh-keygen -t ed25519 -C "tablet"
Der Standardpfad kann in der Regel mit Enter übernommen werden:
~/.ssh/id_ed25519
Danach wird der öffentliche Schlüssel angezeigt:
cat ~/.ssh/id_ed25519.pub
Diese komplette Zeile wird anschließend auf dem Raspberry Pi in
~/.ssh/authorized_keys eingefügt.
Auf dem Raspberry Pi:
mkdir -p ~/.ssh
chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
Danach kann vom Tablet getestet werden:
ssh user@sailsense.local
10. Praktische SSH-Konfiguration
Damit man nicht jedes Mal den vollständigen Hostnamen und Benutzernamen eintippen muss, kann man auf dem Client eine SSH-Konfiguration anlegen.
Unter Linux, macOS oder Termux:
nano ~/.ssh/config
Unter Windows liegt die Datei hier:
C:\Users\BENUTZERNAME\.ssh\config
Beispielinhalt:
Host sailsense
HostName sailsense.local
User user
IdentityFile ~/.ssh/id_ed25519
Danach genügt:
ssh sailsense
Falls sailsense.local im Netzwerk nicht zuverlässig aufgelöst wird, kann statt des
Hostnamens auch die IP-Adresse eingetragen werden:
Host sailsense
HostName 192.168.1.123
User user
IdentityFile ~/.ssh/id_ed25519
11. Passwortlogin erst später deaktivieren
Der Passwortlogin sollte erst deaktiviert werden, wenn die Anmeldung per SSH-Key sicher funktioniert. Sonst sperrt man sich schlimmstenfalls selbst aus. Das ist kein Sicherheitskonzept, sondern ein digitaler Tritt auf die eigene Harke.
Erst wenn der Login ohne Raspberry-Passwort funktioniert, kann man die SSH-Konfiguration bearbeiten:
sudo nano /etc/ssh/sshd_config
Dort setzt man:
PasswordAuthentication no
Danach wird SSH neu gestartet:
sudo systemctl restart ssh
Wichtig: Vorher ein zweites Terminal offen lassen und testen, ob der Key-Login wirklich funktioniert.
12. Kurzfassung
- Der private Schlüssel bleibt auf dem eigenen Gerät.
- Der öffentliche Schlüssel kommt auf das Zielgerät.
- Auf dem Zielgerät steht der öffentliche Schlüssel in
~/.ssh/authorized_keys. - Der Ordner
~/.sshbraucht die Rechte700. - Die Datei
authorized_keysbraucht die Rechte600. - Ein versehentliches
chmod 600 ~/.sshmacht den Ordner unbetretbar. - Wenn SSH weiter nach dem Passwort fragt, mit
ssh -vdebuggen.
Für das konkrete Raspberry-Pi-Setup lautet die wichtigste Reparatur:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chown -R user:user ~/.ssh
Danach sollte der Login vom Windows-PC oder Tablet per SSH-Key funktionieren.