systemd 服务 ssh-agent 停止时失败

systemd 服务 ssh-agent 停止时失败

我有一个名为内容的文件~/.config/systemd/user/ssh-agent.service

[Unit]
Description=SSH key agent

[Service]
Type=simple
Environment=SSH_AUTH_SOCK=%t/ssh-agent.socket
Environment=SYSTEMD_LOG_LEVEL=debug
ExecStart=/usr/bin/ssh-agent -D -a $SSH_AUTH_SOCK

[Install]
WantedBy=default.target

我可以启动服务并使用 ssh-agent,但是如果我像这样停止服务systemctl --user stop ssh-agent,服务就会失败:

Dec 08 17:13:11 box systemd[571]: Stopping SSH key agent...
Dec 08 17:13:11 box systemd[571]: ssh-agent.service: Main process exited, code=exited, status=2/INVALIDARGUMENT
Dec 08 17:13:11 box systemd[571]: ssh-agent.service: Failed with result 'exit-code'.
Dec 08 17:13:11 box systemd[571]: Stopped SSH key agent.

该单元被标记为处于“失败”状态,我无法找出原因。设置KillMode=none使错误消失,但代理当然不会被杀死。知道什么可能导致失败吗?我还尝试在 ssh-agent 调用中设置Type=forking和删除。-D

答案1

ssh-agent通常以退出代码 2 退出,请参阅这里。你可以在 ExecStart 语句前面加上前缀-忽略非零退出代码。

ExecStart=-/usr/bin/ssh-agent -D -a $SSH_AUTH_SOCK

答案2

这里的问题不是失败,而是你的systemctl --user status <svc>输出:

status=2/INVALIDARGUMENT

这个错误来自 $SSH_AUTH_SOCK 变量;所以绑定地址有问题,尝试删除使用默认地址-a ${SSH_AUTH_SOCK}就没有了。

失败状态仍然存在,要摆脱它,您必须实现一个完整的单元解决方案来停止和启动,因为返回代码。

相关内容