Bei Debian wird der ssh-agent durch Xsession gestartet, wenn man sich anmeldet. Jedoch ist der Zugriff von der Konsole aus in dem Moment nicht möglich bzw. wird der Dienst nicht gestartet, wenn man sich nur an der Konsole oder per SSH anmeldet. Mit systemd kann man dies aber einrichten, da mit systemd eine Verwaltung der Benutzerprozesse existiert.

Hierfür muss man als erstes das Skript für den Dienst erstellen: systemctl --user edit --full ssh-agent.service

[Unit]
Description=OpenSSH Agent
Documentation=man:ssh-agent(1)
Before=graphical-session-pre.target

[Service]
Environment=DISPLAY=:0
ExecStart=/usr/bin/ssh-agent -a %t/openssh-agent -D
ExecStartPost=/bin/systemctl --user set-environment SSH_AUTH_SOCK=%t/openssh-agent
ExecStopPost=/bin/systemctl --user unset-environment SSH_AUTH_SOCK
# exit code on SIGTERM
SuccessExitStatus=2

[Install]
WantedBy=default.target

Danach den Dienst noch aktivieren und starten: systemctl --user enable --now ssh-agent.service. In der Datei /etc/X11/Xsession.options muss man dann use-ssh-agent austragen.

In meine .zshenv habe ich folgenden Abschnitt aufgenommen, damit die Variablen bei der Anmeldung gesetzt werden:

# check if user's dbus session is running
if systemctl --user is-system-running --quiet 2>/dev/null
then
    if  -z $SSH AUTH SOCK 
    then
        eval ${(M)${(f)"$(systemctl --user show-environment)"}:#SSH_AUTH_SOCK=*}
        if  -z $SSH AUTH SOCK 
        then
            unset SSH_AUTH_SOCK
        else
            export SSH_AUTH_SOCK
        fi
    fi

    if  -z $GPG AGENT INFO  && systemctl --user is-active --quiet gpg-agent.socket
    then
        # taken from /etc/X11/Xsession.d/90gpg-agent
        export GPG_AGENT_INFO=$(gpgconf --list-dirs agent-socket):0:1
        if [[ -z $SSH_AUTH_SOCK
          && -n ${"${(@Ms.:.)${(f)"$(gpgconf --list-options gpg-agent)"}:#enable-ssh-support:*}"[10]} ]]
        then
            export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
        fi
    fi
fi