Skip to main content

🔐 SSH-Anmeldung mit KeePassXC

Sichere und komfortable SSH-Anmeldung mit KeePassXC

Jeder Admin, der regelmäßig per SSH auf einen Server zugreift, kennt es:
Am liebsten nutzt man SSH-Keys – sicher, bequem und (wenn man ehrlich ist) oft auch ganz ohne zusätzliches Passwort.

Aber: So komfortabel ein passwortloser Login mit SSH-Key auch ist – ein zusätzlicher Schutz durch ein Passwort erhöht die Sicherheit enorm.

Hier kommt KeePassXC ins Spiel.
Mit dem integrierten SSH-Agent lässt sich ein starkes, sicheres Setup einrichten – und das ganz ohne Komfortverlust:

🔐 Vorteile

  • Der private SSH-Key ist sicher verschlüsselt in KeePassXC gespeichert
  • Der Key wird nur geladen, wenn die Datenbank entsperrt ist
  • Ohne Zugriff auf die Datenbank ist keine SSH-Anmeldung möglich
  • KDE-Integration per Wrapper: startet KeePassXC automatisch mit aktiviertem SSH-Agent
  • Funktioniert zuverlässig ohne systemd – über Terminal und KDE-Menü gleichermaßen
  • Keine manuelle Pfadanpassung nötig, die SSH-Agent-Erkennung erfolgt automatisch

Mit dieser Kombination aus Sicherheit und Komfort macht der SSH-Zugang gleich doppelt Spaß –
ganz besonders für „Bequeme“ wie mich.


SSH-Zugang ohne Passwort – sicher gesteuert über KeePassXC

Idee und Quelle: Linux Guides Admin
KeePassXC SSH-Agent: SSH-Schlüssel mit dem Passwortmanager verwalten

Unter Linux Manjaro (Zetar) mit KDE Plasma nutze ich KeePassXC 2.7.10 (aktuelle Version Stand November 2025), installiert über

sudo pacman -S --needed keepassxc

um mich per SSH ohne Passwortabfrage mit meinem VPS zu verbinden:

ssh -p <SSH_PORT> <SSH_USER>@<SERVER_IP>

💡 Hinweis
Wenn du KeePassXC aus Flathub (Flatpak) nutzt:

flatpak install flathub org.keepassxc.KeePassXC  

ist das Verhalten beim SSH-Agenten eingeschränkt, weil Flatpak-Anwendungen in einer Sandbox laufen und dadurch standardmäßig keinen Zugriff auf System-Sockets wie $SSH_AUTH_SOCK haben.

Lösung: Flatpak-Zugriff auf den SSH-Agent erlauben:

flatpak override --socket=ssh-auth org.keepassxc.KeePassXC

Wenn du YubiKey und SSH-Agent zusammen nutzen willst:

flatpak override --device=all --socket=ssh-auth org.keepassxc.KeePassXC
  • --device=all → Zugriff auf USB-Geräte (z.B. YubiKey, Nitrokey)
  • --socket=ssh-auth → Zugriff auf den laufenden SSH-Agenten

Mein starkes Setup

🔐 Der private SSH-Key ist sicher verschlüsselt in KeePassXC gespeichert
🔒 Der Schlüssel wird nur geladen, wenn die KeePassXC-Datenbank entsperrt ist
🧠 Ohne Zugriff auf die Datenbank ist keine passwortlose SSH-Anmeldung möglich
🖥️ KeePassXC wird über das KDE-Menü per Wrapper gestartet und nutzt automatisch den SSH-Agent


1) Neuen SSH-Key mit Passwort erstellen

ssh-keygen -t ed25519 -C "keepassxc"

Dann kommt folgender Dialog:
Bei Enter file in which to save the key (<HOME>/.ssh/id_ed25519):
Hier kannst du einfach den Pfad und Dateinamen eintippen, z.B.:

<H​OME>/.ssh/id_keepassxc

Drücke dann ENTER, und der Key wird unter diesem Namen erstellt.
Danach wirst du nach einem Passwort für den Key gefragt – generiere den z.B. mit KeePassXC.


ssh-keygen -t ed25519 -C "keepassxc"

Hier die Konsolenausgabe:

Generating public/private ed25519 key pair.
Enter file in which to save the key (<HOME>/.ssh/id_ed25519): <HOME>/.ssh/id_keepassxc
Enter passphrase for "<HOME>/.ssh/id_keepassxc" (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in <HOME>/.ssh/id_keepassxc
Your public key has been saved in <HOME>/.ssh/id_keepassxc.pub
The key fingerprint is:
SHA256:xxxxxxxxxxxxxxxxxxxx/yyyyyyyyyyyyyyyyyyy keepassxc
The key's randomart image is:
+--[ED25519 256]--+
|    oo+=**+      |
|   o =.o+*.      |
|  . E o.+.oo     |
|   .   . oo .    |
|    . o S .+ .   |
|     . + == +    |
|        +.o= o   |
|      .o.oo.*    |
|      .ooo.o.o   |
+----[SHA256]-----+

2) Key in KeePassXC einfügen

Starte KeePassXC und öffne deine Datenbank:

keepassxc &
  • Erstelle oder bearbeite einen Eintrag in KeePassXC
  • Titel: SSH-Key
  • Benutzername: <SSH_USER>
  • Passwort-Feld: Trage hier das Passwort deines SSH-Keys ein
  • Reiter Fortgeschritten → privaten SSH-Schlüssel (id_keepassxc) als Anhang hinzufügen
  • Reiter SSH-Agent → unter „Privater Schlüssel“ den Anhang id_keepassxc auswählen
  • „Key zum SSH-Agenten hinzufügen, wenn Daten geöffnet/entsperrt wird“: An
  • „Key zum SSH-Agenten entfernen, wenn Daten geschlossen/gesperrt wird“: An

Diese Methode hat den Vorteil, dass der private Schlüssel innerhalb der KeePassXC-Datenbank gespeichert ist – sicher und portabel.


Test: Läuft bereits ein SSH-Agent?

echo $SSH_AUTH_SOCK

Beispielausgabe:

/tmp/ssh-XXXXXXWHey1A/agent.4711

Wenn das funktioniert, ergänze am Ende deiner ~/.zshrc oder ~/.bashrc
(im weiteren Verlauf wird ~/.zshrc verwendet; passe das bei Bedarf an):

nano ~/.zshrc
# DISPLAY/XAUTHORITY setzen – nötig für grafische Sitzungen (z.B. KDE, Wayland, SSH-Forwarding)
# Stellt sicher, dass KeePassXC im richtigen X-/Wayland-Kontext startet, auch bei nohup oder Autostart
export DISPLAY=${DISPLAY:-:0}
export XAUTHORITY=${XAUTHORITY:-$HOME/.Xauthority}

# SSH-Agent automatisch starten (maximal robust)
if [ -z "$SSH_AUTH_SOCK" ] || ! [ -S "$SSH_AUTH_SOCK" ] || ! ps -p "$SSH_AGENT_PID" > /dev/null 2>&1; then
  eval "$(ssh-agent -s)" > /dev/null
fi
export SSH_AUTH_SOCK

# Alias: KeePassXC über eigenes Skript starten (mit SSH-Agent-Zugriff)
alias kp="nohup $HOME/bin/keepassxc-launcher.sh > /dev/null 2>&1 &"
# Prüfen mit: ssh-add -L

Terminal neu starten oder:

source ~/.zshrc

Das prüft, ob bereits ein SSH-Agent läuft, und startet nur dann einen neuen, wenn keiner aktiv ist.


KeePassXC Wrapper

Optional: Der Qt6-Workaround wird nur benötigt, solange KeePassXC noch keine vollständige Qt6-Unterstützung bietet.

nano ~/bin/keepassxc-launcher.sh

Inhalt:

#!/bin/bash
# Qt6-Workaround + automatische SSH-Agent-Erkennung für KeePassXC

# Qt-Einstellungen (Qt5 statt Qt6 verwenden)
export QT_QPA_PLATFORM=xcb
export QT_QPA_PLATFORMTHEME=qt5ct
export QT_STYLE_OVERRIDE=Breeze  # oder Fusion
# export QT_DEBUG_PLUGINS=1  # nur bei Bedarf aktivieren

# Wenn kein SSH-Agent läuft, starte einen neuen
if [ -z "$SSH_AUTH_SOCK" ] || ! [ -S "$SSH_AUTH_SOCK" ]; then
    eval "$(ssh-agent -s)"
fi

# Optional: SSH_AUTH_SOCK exportieren für spätere Shells (z.B. debug)
echo "SSH_AUTH_SOCK=$SSH_AUTH_SOCK"

# KeePassXC starten
exec keepassxc "$@"

Skript ausführbar machen:

chmod +x ~/bin/keepassxc-launcher.sh

KeePassXC starten:

~/bin/keepassxc-launcher.sh &

oder über den Alias:

kp

Test:

echo $SSH_AUTH_SOCK
ssh-add -L

KDE Autostart (grafisch)

KDE lädt .zshrc nicht automatisch – Lösung:

mkdir -p ~/.config/plasma-workspace/env
nano ~/.config/plasma-workspace/env/ssh-agent.sh

Inhalt:

#!/bin/sh
if [ -z "$SSH_AUTH_SOCK" ]; then
    eval "$(ssh-agent -s)"
    export SSH_AUTH_SOCK
    export SSH_AGENT_PID
fi

ausführbar machen:

chmod +x ~/.config/plasma-workspace/env/ssh-agent.sh

→ Wird bei KDE-/Wayland-Sitzungen automatisch geladen.


3) Privaten Key sicher entfernen – öffentlichen Key auf VPS verwenden

Da der private Schlüssel bereits als Anhang in KeePassXC gespeichert ist, kannst du ihn sicher löschen:

rm <HOME>/.ssh/id_keepassxc
rm <HOME>/.ssh/id_keepassxc.pub  # optional

Wichtig: Nur löschen, wenn der Key in KeePassXC funktioniert!

Auf dem VPS wird nur der öffentliche Key benötigt.
Falls noch nicht vorhanden:

mkdir -p ~/.ssh
chmod 700 ~/.ssh

Den öffentlichen Key mit ssh-add -L ausgeben und anschließend einfügen:

echo "ssh-ed25519 Dein-öffentlicher-KEY keepassxc" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

Ersetze Dein-öffentlicher-KEY keepassxc durch deinen tatsächlichen Key.
💡 Tipp: Den öffentlichen Schlüssel kannst du auch direkt aus KeePassXC abrufen.


KDE-Menüeintrag

Im KDE-Menü den Programmpfad setzen auf:

<H​OME>/bin/keepassxc-launcher.sh

KeePassXC: Werkzeuge → Einstellungen → SSH-Agent → „SSH-Agent-Integration aktivieren“:

KeePassXC_SSH.jpg

... habe fertig 😃