我设置了以下用户服务单元文件,以确保我始终可以访问 Github:
[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/[email protected]/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 ([email protected]>
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
错误。如果我检查设置了此似乎用户服务的另一台计算机,我会得到相同的状态响应,并且 ssh-add -l
返回预期结果:我告诉它自动加载的密钥。该服务每次使用上述配置都可以正常工作,无需调用 eval "$(ssh-agent -s)"
。
如果我在失败的计算机上运行
id
,我当前的用户将拥有 uid=1001
,它与状态消息的 CGroup 行相匹配。
如果我使用
ssh-agent
启动不同的 eval "$(ssh-agent -s)"
进程,那么我可以手动添加密钥(尽管这当然违背了服务的目的);奇怪的是,如果我终止这个 ssh-agent
进程,当我运行 ssh-add -l
时,我会开始收到不同的错误消息,其中显示 Error connecting to agent: No such file or directory
。
要使 SSH 代理正常工作,您必须设置
SSH_AUTH_SOCK
环境变量并指向 SSH 代理套接字。 AFAIK,ssh-agent -k
依赖包含代理 PID 的 SSH_AGENT_PID
才能正常工作。
ssh-agent.service
无法正确导出 ENV,因此您应该将其添加到您的 ~/.profile
,可能需要检查套接字是否确实存在 (if [ -S "/run/user/$UID/ssh-agent.socket" ]; then ...
),但这可能会导致其自身的问题。