Skip to main content

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, Verzeichnisse 700. 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ünschte IdentityFile (mit -v debuggen).
  • Known Hosts: Erster Verbindungsaufbau schreibt den Host-Key in /root/.ssh/known_hosts.