是否可以将 ssh-add / ssh-agent 附加到现有的 pid

是否可以将 ssh-add / ssh-agent 附加到现有的 pid

我正在尝试设置一些客户端,以便每个客户端都可以通过一台服务器 ssh 连接。

我已经为ssh-agent服务器创建了一个服务。

systemctl --user status ssh-agent.service我这里可以看到一个pid:

● ssh-agent.service - SSH authentication agent
     Loaded: loaded (/etc/xdg/systemd/user/ssh-agent.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2022-08-01 17:31:59 CEST; 9min ago
   Main PID: 2761 (ssh-agent)
     CGroup: /user.slice/user-1000.slice/[email protected]/ssh-agent.service
             └─2761 /usr/bin/ssh-agent -a /run/user/1000/ssh-agent.socket -D

Aug 01 17:31:59 node0 systemd[880]: Started SSH authentication agent.
Aug 01 17:31:59 node0 ssh-agent[2761]: SSH_AUTH_SOCK=/run/user/1000/ssh-agent.socket; export SSH_AUTH_SOCK;
Aug 01 17:31:59 node0 ssh-agent[2761]: echo Agent pid 2761;

是否可以eval "$(ssh-agent)"使用这个 pid 来ssh-add访问这个实例。

问题是我必须手动注销并再次登录,才能添加到正确的 ssh-agent?

答案1

的输出ssh-agent由设置环境变量的 shell 代码SSH_AUTH_SOCK和组成SSH_AGENT_PID。两者都在引号中的输出中。因此,在bash/bin/shshell 中运行这些命令后,从该 shell 启动的任何进程都将使用正在运行的代理:

SSH_AUTH_SOCK=/run/user/1000/ssh-agent.socket;导出SSH_AUTH_SOCK SSH_AGENT_PID=2761;导出SSH_AGENT_PID

笔记:

  1. SSH_AUTH_SOCK和的值SSH_AGENT_PID必须从systemctl命令中获取,因为每次启动服务时它们通常都会不同。
  2. 只有从运行命令的 shell 进程启动的进程才会在其环境中具有导出的变量,因此只有这些进程才会使用正在运行的代理。

相关内容