使用 cygwin 在 Windows 上设置 SSH 代理

shi*_*ner 7 windows cygwin ssh-agent

我创建这个问题只是为了提醒我,因为我通常每隔几年才设置一次 SSH 代理。

那么,假设使用类似 linux 的 shell 环境,如何在 Windows 下设置 SSH 代理?

shi*_*ner 13

我目前的设置:

  • 视窗 10 专业版
    • 还应该与提供 setx 命令的旧 Windows 版本一起使用(Win7)
  • Babun 外壳(zsh)
    • 基于 cygwin

我所做的:

我决定将启动命令添加到文件 .zshrc 中,以便在我每次启动新 shell 时运行它。所以这里是命令:

# startup of the ssh-agent
AGENT_PID=$(pgrep -x ssh-agent)
if [ $? -ne 0 ]; then
  echo "~/.zshrc: Starting SSH Agent!"

  eval `ssh-agent` && ssh-add ~/.ssh/id_rsa
  setx SSH_AUTH_SOCK $SSH_AUTH_SOCK
  setx SSH_AGENT_PID $SSH_AGENT_PID

  echo "~/.zshrc: SSH Agent running (PID: $SSH_AGENT_PID)"
else
  echo "~/.zshrc: SSH Agent already running (PID: $AGENT_PID)"
fi
Run Code Online (Sandbox Code Playgroud)
  1. pgrep 命令搜索正在运行的 SSH 代理。如果正在运行,它将输出进程 ID 并跳过另一个代理的启动。
  2. 如果找不到,则启动代理并导出环境变量
    1. eval `ssh-agent`启动代理并评估它的输出,即设置环境变量SSH_AUTH_SOCKSSH_AGENT_PID
    2. ssh-add 将指定的私钥添加到代理中,代理最初会提示输入私钥密码。
    3. 由于上述变量只为启动的 shell 进程设置,因此有必要全局设置它们,以便用户可以使用其他 shell 和其他不是从 shell 启动的工具。这可以使用 Windows 中的 setx 命令来完成。我只是根据从代理中检索到的变量来设置变量。

之后,一切就绪,一旦您第一次启动 shell,代理就会运行并可用。为确保代理随 Windows 启动而启动,您还可以将外壳启动器添加到 Windows 自动启动。

  • 您可能希望推迟向代理添加 SSH 密钥,直到您第一次使用该密钥。为此,不要在 shell 的 RC 脚本中调用 `ssh-add`,而是在 SSH 配置中添加 `AddKeysToAgent yes`。 (2认同)