如何在没有 cygwin 的情况下使用 ssh-agent.exe 获取受密码保护的私钥?

如何在没有 cygwin 的情况下使用 ssh-agent.exe 获取受密码保护的私钥?

我想使用 ssh-agent.exe 在 Windows 中访问受密码保护的私钥的 SSH 服务。

到目前为止,我可以通过手动更改家庭帐户中的环境设置来利用 ssh-agent.exe 来设置环境变量,如下所示:

SSH_AUTH_SOCK = %TEMP%\ssh-Co312dEaE\agent.1208

环境变量不应在 cmd 框中设置,否则访问 ssh.exe 的其他进程可能无法识别环境变量。它必须在 Windows 用户帐户中设置。

机器重启后需重新进行以上设置。

有没有什么好的方法可以自动启动 ssh-agent 并在本机 Windows 会话上下文中设置 SSH_AUTH_SOCK?

答案1

运行时ssh-agent您应该将SSH_AUTH_SOCKSSH_AGENT_PID环境变量保存到文件中,并使用它们来查看代理是否已在运行。

您需要运行一次 cygwin 来启动代理,但此后它不必运行。这也可能设置为服务。

为了在后台运行 ssh-agent.exe,我添加了以下内容.bashrc

#
# Store env variables
run_ssh_agent="${HOME}/.ssh/agent-for-${HOSTNAME}.pid"
#
# Include env variables if they exist
[ -f "$run_ssh_agent" ] && . "$run_ssh_agent" >/dev/null 2>&1
#
# Test if agent is running
if kill -0 $SSH_AGENT_PID > /dev/null 2>&1; then
    #
    # Agent is running
    echo Agent pid $SSH_AGENT_PID
else
    #
    # Agent is not running, launch it and store env variables
    ssh-agent -s > "$run_ssh_agent"
    . "$run_ssh_agent"
    #
    # Add private keys
    ssh-add
fi
#
# List loaded identities
ssh-add -l

这并不能完全实现您所寻找的功能(在没有 cygwin 的情况下运行 ssh-agent),但它非常适合将密钥存储在内存中。

答案2

我为 Windows cmd.exe 创建了一个相当复杂的脚本,并使用注册表黑客技术使其在(大多数)启动的命令 shell 中自动运行。

https://github.com/ericblade/ssh-agent-cmd

基本上,它所做的事情与 Unix 脚本所做的事情类似...除了它设置要使用的特定套接字文件,而不是尝试解析 ssh-agent 输出。

除 ssh、ssh-agent 和 ssh-add 之外的 100% Windows cmd 脚本。

相关内容