如何杀死由systemd管理的脚本启动的ssh代理?

如何杀死由systemd管理的脚本启动的ssh代理?

我想在用户登录时启动 ssh-agent 实例。我还希望在创建该代理后将几个特定密钥添加到该代理中。我应该能够通过 systemd 启动和停止代理。当我注销时,该 ssh-agent 实例应该被终止。

您将如何编写 systemd 服务文件来实现此目的?

答案1

下面对我有用。

经过大量阅读、重新阅读、再重新阅读,我发现ssh-agent可以在前台运行,所以 systemd 能够管理它。此外,我发现您可以添加无限的ExecStartPost指令,因此我认为这将允许向代理添加特定的密钥。

效果非常好。唯一奇怪的是,显式停止服务后,它处于失败状态。更多阅读让我看到该ssh-agent进程以状态 2 退出,因此非零,因此SuccessExitStatus需要将其设置为 2。现在,当停止时,其状态按inactive预期显示。

[Unit]
Description=Project SSH Agent

[Service]
Type=simple
Environment=PROJECT_SSH_AGENT=%t/project-ssh-agent.socket
ExecStart=/usr/bin/ssh-agent -D -a "$PROJECT_SSH_AGENT"
ExecStartPost=echo $SSH_AUTH_SOCK
ExecStartPost=echo $PROJECT_SSH_AGENT
ExecStartPost=/bin/sh -c "SSH_AUTH_SOCK=$PROJECT_SSH_AGENT /usr/bin/ssh-add /home/lpeabody/.ssh/id_rsa.project"
SuccessExitStatus=2

[Install]
WantedBy=default.target

相关内容