为什么 `ssh-agent -k` 没有杀死 ssh-agent (macOS),或者为什么没有设置 `SSH_AGENT_PID`?

Sea*_*mus 3 ssh openssh ssh-agent

我正在尝试解决突然爆发的短期 SSH 连接问题。这些连接是从我的 Mac(MBP、Catalina 10.15.6 zsh)发起到我的网络上的一些 Linux “设备”,特别是Raspberry Pies。连接终止后,他们将消息留client_loop: send disconnect: Broken pipe在终端中。

但是:这仅作为背景提供,以防与我眼前的问题相关:

为什么命令ssh-agent -k不杀死ssh-agent

似乎失败是因为SSH_AGENT_PID未设置环境变量。我根据我在 Mac 终端应用程序中看到的内容猜测:

1.列出ssh​​相关进程

% pgrep -f ssh       
2138
75076
75942
75943
75944
% ps 2138     
  PID   TT  STAT      TIME COMMAND
 2138   ??  S      0:00.26 /usr/bin/ssh-agent -l
Run Code Online (Sandbox Code Playgroud)

PID2138ssh-agent,其他 PID 是ssh与 Raspberry 或 Ubuntu 盒子的活动连接 - 所有 Linux。

2.杀死ssh-agentIAW man ssh-agent

man ssh-agent

ssh-代理 [-c | -s] -k
-k 终止当前代理(由 SSH_AGENT_PID 环境变量指定)。

% ssh-agent -k 
SSH_AGENT_PID not set, cannot kill agent  
% sudo ssh-agent -k  
SSH_AGENT_PID not set, cannot kill agent

% echo $SSH_AGENT_PID

% 
Run Code Online (Sandbox Code Playgroud)

我可以杀死ssh-agentusing kill 2138, 或 with pkill ssh-agent,所以看来答案可能是Apple的版本ssh-agent不提供环境变量SSH_AGENT_PID。但如果这就是答案,就会引发另一个问题:是否有不分配环境变量的正当理由SSH_AGENT_PID

另请注意一个相关问题。然而,该问题的 OP 并未指出他的 SSH 客户端主机是 macOS。他还表示SSH_AGENT_PID尚未确定,但似乎只关心如何ssh-agent开始。就我而言 (macOS),ssh-agent在启动 ssh 连接时启动。我在“类似问题”建议箱里找到了其他问答;我读过其中一些,但似乎没有一个与我的相同。

小智 6

看到这个答案

man 页面

当 ssh-agent 启动时,它会打印设置其环境变量所需的 shell 命令,这些命令又可以在调用 shell 中进行评估,例如eval `ssh-agent -s`

因此,运行ssh-agent只是显示设置环境变量的命令,而不是实际设置它们,除非您使用eval.