![使用 Cygwin 启动 ssh-agent 的最佳方法是什么?](https://linux22.com/image/1507283/%E4%BD%BF%E7%94%A8%20Cygwin%20%E5%90%AF%E5%8A%A8%20ssh-agent%20%E7%9A%84%E6%9C%80%E4%BD%B3%E6%96%B9%E6%B3%95%E6%98%AF%E4%BB%80%E4%B9%88%EF%BC%9F.png)
我希望ssh-agent
在启动 Cygwin 时也能启动,因为我经常使用 ssh 直通。
我尝试添加:
eval `ssh-agent.exe`
到我的.bashrc
,但任何时候我使用Alt-F2
打开一个新的终端窗口,就会.bashrc
运行,因此ssh-agent
会创建新的,这是不可取的并且会干扰直通。
然后我尝试将 eval 命令移动到.bash_profile
,但这也导致了同样的问题——我猜每个新的终端窗口都被视为一个新的登录 shell。
第三个选项是使用cygrunsrv
,但我刚刚发现它,并且不清楚如何将它用于这个特定目的,也许更重要的是,如何将服务SSH_AUTH_SOCK
和SSH_AGENT_PID
信息从创建的位置传递到每个新创建的 shell。
欢迎就实现此结果的最佳方法提出任何建议 - 执行并等待单个 ssh-agent,并且其信息可立即用于任何新打开的 shell。
答案1
您可以将其放入您的.bashrc
,但在再次启动它之前,您应该检查它是否已在运行。例如,您可以执行
if [ -z "$SSH_AUTH_SOCK" ]; then
(umask 077; ssh-agent > "$HOME/.ssh/environment")
ssh-add
fi
作为该过程的一部分。
Also, if the agent is not running, you could first test if that environment file exists and source it like
environ="$HOME/.ssh/environment"
if [ -f "$environ" ]; then
. "$environ" >/dev/null
fi
if [ -z "$SSH_AUTH_SOCK" ] || ! ps -p "$SSH_AGENT_PID" | grep -q ssh-agent; then
(umask 077; ssh-agent > "$environ")
ssh-add
fi
有一个很长的答案详细说明了这一点这里在 U&L 网站上。
我做了类似的事情,但是让environ
文件包含当前主机名,因为我的主目录位于网络共享上,并且我想同时在不同的主机上运行代理。
为了明确地说明这如何回答您关于如何SSH_AUTH_SOCK
在进程之间传递变量的问题,您可以将输出存储ssh-agent
在一个文件中,然后在每个 shell 中再次获取它