如何在关闭 Cygwin 时自动关闭 ssh-agent?

如何在关闭 Cygwin 时自动关闭 ssh-agent?

我在使用 Windows 10 Pro。

我已将以下几行添加到我的 Cygwin(完全最新的)~/.bashrc文件中:

eval $(ssh-agent) > /dev/null
ssh-add > /dev/null 2>&1

为了使我不必每次都这样做,因为除了连接 Linux 机器之外我通常不做任何其他事情。

请注意,我将这些命令的输出重定向到黑洞对我来说并不是真的对它感兴趣,否则它会输出类似以下内容:

Agent pid 11060
Identity added: /home/vlastimil/.ssh/id_rsa (/home/vlastimil/.ssh/id_rsa)

但是,我今天注意到,由于某种原因,ssh-agent.exe在我注销并关闭 Cygwin 后,这些进程仍保留在内存中。

问题是:

怎样ssh-agent随着Cygwin的关闭而自动关闭?

答案1

我认为,首先要做的是在文件中~/.bashrc保存输出:

eval $(ssh-agent)

而不是丢弃它;示例如下:

eval $(ssh-agent) > ~/.ssh-agent-stdout

最后,创建以下文件:

~/.bash_logout

包含内容:

ssh_agent_pid=$(awk '{ print $3 }' ~/.ssh-agent-stdout)
kill -HUP "$ssh_agent_pid"

答案2

一个小的.bashrc改进也应该适用于多个会话:

函数清理 {
  TTY=$(基本名称$(tty))
  如果 [ -f ~/.ssh-agent-stdout.${TTY} ]; 然后
    ssh_agent_pid=$(awk'{打印$3}'~/.ssh-agent-stdout.${TTY})
    杀死-HUP“$ssh_agent_pid”
    rm -f ~/.ssh-agent-stdout.${TTY}
}

陷阱清理 EXIT


TTY=$(基本名称$(tty))
eval $(ssh-agent) > ~/.ssh-agent-stdout.${TTY}

它的作用与上面的答案相同,但它将 TTY 号码添加到 pid 文件中,因此当陷阱触发时,正确的 ssh-agent 将被杀死。

相关内容