![如何在关闭 Cygwin 时自动关闭 ssh-agent?](https://linux22.com/image/1560329/%E5%A6%82%E4%BD%95%E5%9C%A8%E5%85%B3%E9%97%AD%20Cygwin%20%E6%97%B6%E8%87%AA%E5%8A%A8%E5%85%B3%E9%97%AD%20ssh-agent%EF%BC%9F.png)
我在使用 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 将被杀死。