Skip to main content

SSH - only key

SSH: Schlüssel mit Passphrase & nur-Key-Login (root & jj)

DieseZiel: AnleitungAuf beschreibt,dem wie auf einem Client ein Ed25519-Schlüsselpaar mit starker Passphrase erstellterzeugen und in der~/.ssh/config SSH-Konfiguration hinterlegt wird.hinterlegen. Auf dem Server wird der LoginLogins für root und jj auf Public-Key-AuthAuthentifizierung beschränkt.beschränken.

Platzhalter / Variablen

  • SERVER_IP: IP oder DNS-NameFQDN des Zielservers.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).wählbarer Schlüsselnamens-Ordner

1) Client: SSH-Key mit Passphrase erzeugen

Im

Befehl Passwort-Manager eine stabile Passphrase anlegen und für den Private Key verwenden.(kopierbar)

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"

Beispielausgabe

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
The key fingerprint is:
SHA256:**************************** little-ghost
The key's randomart image is:
+--[ED25519 256]--+
|*****************|
|*****************|
|*****************|
|*****************|
|*****************|
|*****************|
|*****************|
|*****************|
|*****************|
+----[SHA256]-----+
WasRechte bedeutensetzen

Optional:

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.

    Beispielausgabe

    # (keine Ausgabe bei Erfolg)
    # Kontrolle:
    ls -ld /root/.ssh /root/.ssh/JSc /root/.ssh/JSc/little-ghost
    ls -l /root/.ssh/JSc/little-ghost/

    2) Client: SSH-Konfiguration für Zielhost

    DateiIn /root/.ssh/config bearbeiten bzw. anlegen:eintragen/ergänzen:

    root@little-snitch:/root # nano /root/.ssh/config

    Eintrag hinzufügen

    Dateiinhalt (oder anpassen):kopierbar)

    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
    

    3) Client: Public Key anzeigenanzeigen/kopieren

    Public Key zum Hinterlegen auf dem Server

    Befehl (z. B. in ~/.ssh/authorized_keys):kopierbar)

    root@little-snitch:/root # cat /root/.ssh/JSc/little-ghost/id_ed25519.pub

    Beispielausgabe

    ssh-ed25519 AAAAAAAAAABBBBBBBBBB/CCCCCCCCCC little-ghost
    

    Den gesamtenDiesen Einzeiler in die Datei /root/.ssh/authorized_keys des Ziel-Benutzers auf dem Server kopierenin die Datei ~<user>/.ssh/authorized_keys einfügen (z.eine B.Zeile perpro temporäremKey, Passwort-Login,keine Konsole oder scp)Umbrüche).


    4) Server: nur Public-Key-Login erlauben

    root nur mitper Public Key

    Datei /etc/ssh/sshd_config.d/10-root-only-key.conf anlegen/bearbeiten:ändern.

    Dateiinhalt (kopierbar)

    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
    

    Beispielausgabe

    # Kontrolle:
    cat /etc/ssh/sshd_config.d/10-root-only-key.conf

    5) Server: jj nur mitper Public Key

    Datei /etc/ssh/sshd_config.d/20-jj-only-key.conf

    anlegen/bearbeiten:

    Dateiinhalt (kopierbar)

    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
    

    Konfiguration6) Server: Syntax prüfen & Dienst neu laden

    Syntaxtest und Reload:

    Befehl (kopierbar)

    root@server:/# sshd -t
    root@server:/# sleep 30
    root@server:/#
    systemctl reload ssh   # ←Debian-Standarddienstname
    üblicher Dienstname auf

    Beispielausgabe

    Debian
    # Bei korrekter Konfiguration keine Ausgabe.
    # Alternativ,Fehler fallswürden vorhanden:hier #mit systemctlZeile/Datei reloadgemeldet sshd
    werden.

    Neuen


    7) Client: Login auszum einerServer zweitentesten

    Shell testen, bevor

    Befehl die(kopierbar)

    aktive Sitzung beendet wird:
    root@little-snitch:/root # ssh SERVER_IP
    

    Beispielausgabe

    The authenticity of host 'SERVER_IP (SERVER_IP)' can't be established.
    ED25519 key fingerprint is SHA256:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.
    Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
    Warning: Permanently added 'SERVER_IP' (ED25519) to the list of known hosts.
    Enter passphrase for key '/root/.ssh/JSc/little-ghost/id_ed25519':
    Last login: Wed Sep 24 12:34:56 2025 from 203.0.113.42
    root@server:~#

    Hinweise

    & Fehlerbehebung
    • Passphrase: Sicher im Passwort-Manager speichern. Kein leeres Passwort verwenden.
    • Dateirechte: Verzeichnisse 700, Private KeysKey 600, VerzeichnissePublic Key 700644. 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: ErsterDatei Verbindungsaufbau schreibt den Host-Key inheißt /root/.ssh/known_hosts (nicht known_hos). Debug bei Problemen: ssh -v SERVER_IP zeigt, welchen Key der Client nutzt.

    Stand: 25.09.2025 – Autor: <Dein Name>