使用 Cygwin 启动 ssh-agent 的最佳方法是什么?

使用 Cygwin 启动 ssh-agent 的最佳方法是什么?

我希望ssh-agent在启动 Cygwin 时也能启动,因为我经常使用 ssh 直通。

我尝试添加:

eval `ssh-agent.exe`

到我的.bashrc,但任何时候我使用Alt-F2打开一个新的终端窗口,就会.bashrc运行,因此ssh-agent会创建新的,这是不可取的并且会干扰直通。

然后我尝试将 eval 命令移动到.bash_profile,但这也导致了同样的问题——我猜每个新的终端窗口都被视为一个新的登录 shell。

第三个选项是使用cygrunsrv,但我刚刚发现它,并且不清楚如何将它用于这个特定目的,也许更重要的是,如何将服务SSH_AUTH_SOCKSSH_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 中再次获取它

相关内容