运行SSH Agent服务时出现「Could not open a connection to your authentication agent」错误
配置与现状
为自动管理SSH密钥以访问GitHub,我配置了如下systemd用户服务单元文件:
[Unit] Description=SSH key agent [Service] Type=exec Environment=SSH_AUTH_SOCK=%t/ssh-agent.socket Environment=DISPLAY=:0 ExecStart=/usr/bin/ssh-agent -D -a $SSH_AUTH_SOCK ExecStartPost=/usr/bin/ssh-add $GITHUBSSH [Install] WantedBy=default.target
执行systemctl --user status ssh-agent.service确认服务已正常运行:
● ssh-agent.service - SSH key agent Loaded: loaded (/home/myUser/.config/systemd/user/ssh-agent.service; enabled; preset: enabled) Active: active (running) since Fri 2024-10-25 20:10:27 EDT; 18h ago Invocation: 0b625b5fa3ed4386ab696da6979876ac Main PID: 2044 (ssh-agent) Tasks: 1 (limit: 16673) Memory: 1.7M (peak: 3.2M) CPU: 31ms CGroup: /user.slice/user-1001.slice/user@1001.service/app.slice/ssh-agent.service └─2044 /usr/bin/ssh-agent -D -a /run/user/1001/ssh-agent.socket Oct 25 20:10:27 fitzgeraldManjaro systemd[2010]: Starting SSH key agent... Oct 25 20:10:27 fitzgeraldManjaro ssh-agent[2044]: SSH_AUTH_SOCK=/run/user/1001/ssh-agent.socket; export SSH_AUTH_SOCK; Oct 25 20:10:27 fitzgeraldManjaro ssh-agent[2044]: echo Agent pid 2044; Oct 25 20:10:27 fitzgeraldManjaro ssh-add[2047]: Identity added: /home/myUser/.ssh/fitzgeraldManjaroGithub (myemail@address.com) Oct 25 20:10:27 fitzgeraldManjaro systemd[2010]: Started SSH key agent.
ps -aux | grep 'ssh'也确认PID 2044的ssh-agent进程正在运行,但执行ssh-add -l时会报错:Could not open a connection to your authentication agent。手动执行eval "$(ssh-agent -s)"启动新进程后可正常添加密钥,但杀死该进程后ssh-add -l又会提示Error connecting to agent: No such file or directory。另一台配置相同的机器可正常自动加载密钥,无需手动执行eval命令。
问题原因
systemd服务中设置的SSH_AUTH_SOCK环境变量仅在服务进程内部生效,并未同步到用户的shell会话中,导致ssh-add无法找到正确的socket路径。
解决方法
方法1:修改shell配置文件
编辑你使用的shell配置文件(如~/.bashrc、~/.zshrc或~/.profile),添加以下内容:
export SSH_AUTH_SOCK="$XDG_RUNTIME_DIR/ssh-agent.socket"
保存后执行source ~/.bashrc(对应你的shell),或重新打开终端,再次执行ssh-add -l即可验证。
方法2:通过systemd环境目录全局生效
创建~/.config/environment.d/90-ssh-agent.conf文件,写入:
SSH_AUTH_SOCK=${XDG_RUNTIME_DIR}/ssh-agent.socket
systemd用户会话会自动加载该目录下的环境变量配置,无需修改shell配置,重启会话后即可生效。
内容的提问来源于stack exchange,提问作者user968270

