如何启动ssh-agent并将其用作systemd服务?


15
  1. 如何将ssh-agent作为systemd服务启动?网上有一些建议,但并不完整。

  2. 如果ssh-agent服务成功启动,如何自动添加未加密的密钥?从列表中添加密钥~/.ssh/.session-keys可能会很好。

  3. 之后如何SSH_AUTH_SOCK在任何登录会话中进行设置?最正确的方法是将其从ssh-agent服务推送到systemd-logind服务(不知道是否有可能)。普通的天真方法是将其添加到中/etc/profile


网络上的建议缺少什么?
Mark Stosberg '17

Answers:


25

要创建systemd ssh-agent服务,您需要创建一个文件,~/.config/systemd/user/ssh-agent.service因为ssh-agent是用户隔离的。

[Unit]
Description=SSH key agent

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

[Install]
WantedBy=default.target

添加SSH_AUTH_SOCK DEFAULT="${XDG_RUNTIME_DIR}/ssh-agent.socket"~/.pam_environment

最后启用并启动此服务。

systemctl --user enable ssh-agent
systemctl --user start ssh-agent

并且,如果您使用的ssh版本高于7.2。 echo 'AddKeysToAgent yes' >> ~/.ssh/config

这将指示ssh客户端始终将密钥添加到正在运行的代理中,因此无需预先ssh-添加它。

请注意,创建~/.ssh/config文件时,可能需要运行:

chmod 600 ~/.ssh/config 要么 chown $USER ~/.ssh/config

否则,您可能会收到此Bad owner or permissions on ~/.ssh/config错误。


launchd在OS X上,当访问Unix套接字(并且SSH_AUTH_SOCK变量预先填充了路径...)时,OS X设置为启动ssh-agent (例如inetd,但是是Unix套接字)。这似乎也有可能systemd。(是否可以为每个用户的服务选择是否使用系统范围的服务……)
Gert van den Berg,

我得到的Failed to execute operation: Process org.freedesktop.systemd1 exited with status 1,当我运行systemctl --user enable ssh-agent在centos7
scarba05

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.