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

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

我正在尝试解决突然爆发的短期 SSH 连接问题。这些连接是从我的 Mac(MBP、Catalina 10.15.6 zsh)发起到某些 Linux 的“电器”存在于我的网络上的 - 特别是覆盆子派。连接终止后,他们将消息留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

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

% 

我可以ssh-agent使用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 连接时启动。我在“类似问题”建议箱里找到了其他问答;我读过其中一些,但似乎没有一个与我的相同。

答案1

这个答案

来自man :

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

所以运行ssh-agent只是节目设置环境变量的命令,实际上不是他们,除非你使用eval.

答案2

我在 ubuntu 18.04 上遇到了同样的问题。使用pidof ssh-agent获取 ID后,以下内容对我有用:

export SSH_AGENT_PID=<pid>
eval `ssh-agent -k`

相关内容