为什么我应该在注销时杀死 ssh-agent?

rat*_*ame 5 ssh ssh-agent

我已经在我的 macOS 笔记本电脑和 24x7 运行的服务器上设置了 ssh-agent。为什么我需要在每次注销时杀死 ssh-agent?

我对 ssh-agent 的了解来源: https: //kb.iu.edu/d/aeww

eval `ssh-agent`    # Start ssh-agent
echo $SSH_AGENT_PID    # 20552 (Check ssh-agent is running)
ssh-add    # Add id_rsa key to ssh-agent
kill $SSH_AGENT_PID    # Kill ssh-agent on logout
Run Code Online (Sandbox Code Playgroud)

为什么需要最后一步?

杀死ssh-agent进程的方法

我发现找到所有正在运行的 shh-agent 进程的最简单方法

ps ax | grep ssh-agent    # outputs details of processes
Run Code Online (Sandbox Code Playgroud)

或者

pgrep ssh-agent    # outputs list of PIDs only
Run Code Online (Sandbox Code Playgroud)

我发现终止所有正在运行的 ssh-agent 进程的最简单方法

pkill ssh-agent
Run Code Online (Sandbox Code Playgroud)

Sha*_*dur 5

如果您不手动将其杀死,代理将驻留在您的系统中。

除了一般原则上不整洁之外,这还有两个潜在的问题:

  1. ssh-agent正如 Kusanalanda 指出的那样,这意味着您每次登录时都会生成另一个进程,即使它们的足迹可能可以忽略不计,这也会在进程表上变得有点草率。

  2. 更严重的是,每个进程的内存中都会有您解锁的私钥。如果攻击者要访问您的系统并利用内核内存管理或代码ssh-agent本身中的(假设的,我目前不知道存在任何)错误来可能提取您的私钥。

当然,最后一种可能性很低,但终止该进程并完全消除风险同样容易。

安全总比后悔好。