SSH - only key
SSH: Schlüssel mit Passphrase & nur-Key-Login (root & jj)
Diese Anleitung beschreibt, wie auf einem Client ein Ed25519-Schlüsselpaar mit starker Passphrase erstellt und in der SSH-Konfiguration hinterlegt wird. Auf dem Server wird der Login für root
und jj
auf Public-Key-Auth beschränkt.
Platzhalter / Variablen
SERVER_IP
: IP oder DNS-Name des Zielservers.$Dieser_Client
: Klartext-Kommentar (z. B. Hostname des Clients), wird in den Public Key geschrieben.little-ghost
: Name des Schlüssel-Unterordners (frei wählbar).
Client: SSH-Key mit Passphrase erzeugen
Im Passwort-Manager eine stabile Passphrase anlegen und für den Private Key verwenden.
root@little-snitch:/root # ssh-keygen \
-t ed25519 \
-a 2048 \
-o \
-Z aes256-ctr \
-C "$Dieser_Client" \
-f "/root/.ssh/JSc/little-ghost/id_ed25519"
Generating public/private ed25519 key pair.
Enter passphrase for "/root/.ssh/JSc/little-ghost/id_ed25519" (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/JSc/little-ghost/id_ed25519
Your public key has been saved in /root/.ssh/JSc/little-ghost/id_ed25519.pub
Was bedeuten die Parameter?
-t ed25519
: Moderner, schneller Kurvenschlüssel.-a 2048
: Erhöht KDF-Runden (Passphrase-Härtung, groß aber ok).-o
: Neues OpenSSH-Schlüsselformat.-Z aes256-ctr
: Verschlüsselungs-Cipher für den Private Key.-C
: Kommentar (z. B. Client-Name).-f
: Zielpfad für Schlüsseldateien.
Client: SSH-Konfiguration für Zielhost
Datei /root/.ssh/config
bearbeiten bzw. anlegen:
root@little-snitch:/root # nano /root/.ssh/config
Eintrag hinzufügen (oder anpassen):
Host SERVER_IP
HostName SERVER_IP
IdentitiesOnly yes
IdentityFile /root/.ssh/JSc/little-ghost/id_ed25519
ForwardAgent no
ForwardX11 no
StrictHostKeyChecking ask
UserKnownHostsFile /root/.ssh/known_hosts
Client: Public Key anzeigen
Public Key zum Hinterlegen auf dem Server (z. B. in ~/.ssh/authorized_keys
):
root@little-snitch:/root # cat /root/.ssh/JSc/little-ghost/id_ed25519.pub
ssh-ed25519 AAAAAAAAAABBBBBBBBBB/CCCCCCCCCC little-ghost
Den gesamten Einzeiler in die Datei /root/.ssh/authorized_keys
des Ziel-Benutzers auf dem Server kopieren (z. B. per temporärem Passwort-Login, Konsole oder scp
).
Server: nur Public-Key-Login erlauben
root
nur mit Public Key
Datei /etc/ssh/sshd_config.d/10-root-only-key.conf
anlegen/bearbeiten:
root@server:/# nano /etc/ssh/sshd_config.d/10-root-only-key.conf
# Root: nur noch Public-Key, keine Passwörter/Keyboard-Interactive
Match User root
PubkeyAuthentication yes
PasswordAuthentication no
KbdInteractiveAuthentication no
AuthenticationMethods publickey
PermitRootLogin prohibit-password
jj
nur mit Public Key
Datei /etc/ssh/sshd_config.d/20-jj-only-key.conf
anlegen/bearbeiten:
root@server:/# nano /etc/ssh/sshd_config.d/20-jj-only-key.conf
# jj: nur noch Public-Key, keine Passwort-/Keyboard-Interactive-Logins
Match User jj
PubkeyAuthentication yes
PasswordAuthentication no
KbdInteractiveAuthentication no
AuthenticationMethods publickey
Konfiguration prüfen & Dienst neu laden
Syntaxtest und Reload:
root@server:/# sshd -t
root@server:/# sleep 30
root@server:/# systemctl reload ssh # ← üblicher Dienstname auf Debian
# Alternativ, falls vorhanden:
# systemctl reload sshd
Neuen Login aus einer zweiten Shell testen, bevor die aktive Sitzung beendet wird:
root@little-snitch:/root # ssh SERVER_IP
Hinweise & Fehlerbehebung
- Passphrase: Sicher im Passwort-Manager speichern. Kein leeres Passwort verwenden.
- Dateirechte: Private Keys
600
, Verzeichnisse700
. Falsche Rechte führen zu „unprotected private key file“. - authorized_keys: Jeder Public-Key in einer Zeile, keine Umbrüche oder zusätzliche Leerzeichen.
- Dienstname: Auf Debian ist der Service in der Regel
ssh.service
.sshd
kann fehlen. - Fehler „Permission denied (publickey)“: Prüfen: falscher User, Key liegt nicht in
~<user>/.ssh/authorized_keys
, Rechte, oder Client nutzt nicht das gewünschteIdentityFile
(mit-v
debuggen). - Known Hosts: Erster Verbindungsaufbau schreibt den Host-Key in
/root/.ssh/known_hosts
.