我想使用 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_SOCK
和SSH_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 脚本。