连接到当前正在运行的 ssh-agent

连接到当前正在运行的 ssh-agent

创建代理后,它会自动与父进程分离。

someUser@MyPC:~$ eval "$(ssh-agent -s)"
Agent pid 10222
someUser@MyPC:~$ ps -e --forest | grep ssh-agent
  10222 ?        00:00:00 ssh-agent

当我关闭终端并打开一个新终端来创建另一个代理时,现在有两个代理正在运行。

someUser@MyPC:~$ eval "$(ssh-agent -s)"
Agent pid 10503
someUser@MyPC:~$ ps -e --forest | grep ssh-agent
  10222 ?        00:00:00 ssh-agent
  10503 ?        00:00:00 ssh-agent

是否有一个命令可以连接现有的 ssh-agent,只要某个控制终端不关闭或终止它?

答案1

当您启动 时ssh-agent,它将为您提供两个环境变量:SSH_AUTH_SOCKSSH_AGENT_PID。这就是为什么您需要eval "$(...)"命令周围来启动代理:它输出 shell 命令来设置变量,并eval导致这些命令在当前 shell 会话中执行。

要与现有代理连接,请将SSH_AUTH_SOCK环境变量设置为指向现有代理的套接字。为此,您可以在启动后将变量及其值输出到文件中,以便其他终端可以从那里获取它们。

例如:

eval "$(ssh-agent -s)"
echo "SSH_AUTH_SOCK=$SSH_AUTH_SOCK" > ~/.ssh_auth_sock_info

然后在另一个终端中获取代理连接信息:

. ~/.ssh_auth_sock_info

同样,该SSH_AGENT_PID变量将包含代理的 PID,因此您可以在注销脚本等中使用它来终止代理。

如果您知道代理 PID 但不知道套接字路径,并且您具有使用所需的权限lsof,则可以使用它来查找套接字。例如,在运行中sudo lsof -p 10222,您将看到第一个 SSH 代理的打开文件和套接字。通常,文件描述符 #3 是代理套接字。

相关内容