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