我一直在使用 Pageant 通过设置环境变量来处理带有 Git 的 SSH 密钥(这样我只需要输入一次密钥密码)GIT_SSH
。
我现在想要做的是通过 Windows 10 上的内置 OpenSSH 客户端使用 Pageant 从我的 PowerShell 终端进行常规 SSH 连接。
在这种情况下,是否可以不使用 PuTTY 而将 Pageant 用作独立的 SSH 代理?
https://github.com/cuviper/ssh-pageant似乎是最接近的东西,但它仅适用于 Cygwin/MSYS。
答案1
是的,有了足够新的 Pageant 版本,尽管它仍然存在一些问题。
最新版本的 PuTTY 现在使用 ssh-agent 协议通过命名管道与 Pageant 通信,这恰好与 Win32-OpenSSH 使用的 IPC 方法完全相同。使用以下命令启动 Pageant--openssh-config
将写出一个包含管道路径的 OpenSSH 配置文件,然后您可以Include
从.ssh/config
.
不幸的是,由于 Pageant 没有在命名管道路径(其中有反斜杠)周围使用正确的引用,我无法使其可靠地工作。
答案2
我能够编写修复pagent.conf
脚本来修复文件(使用--openssh-config
Pageant 选项创建)。此脚本在命名管道路径周围添加双引号。请注意,命名管道路径每次重新启动都会发生变化,因此您需要在每次启动后运行此脚本。我使用的是bash
GOWsed
包中的https://github.com/bmatzelle/gow (请注意,WSL2 具有与 GOW 冲突的可执行bash
文件sed
,并且由于行尾问题似乎无法工作)
fix.bash
#quote the named pipe string for compatibility.
if [ -e pagent.conf ]
then
if [ -e pagentfixed.conf ]
then
rm pagentfixed.conf
fi
sed.exe -e "s/ / \"/g;s/$/\"/" pagent.conf >pagentfixed.conf
fi
运行执行
bash fix.bash
从~/.ssh
目录中。
.ssh/config
然后在文件顶部添加
Include pagentfixed.conf
您可以使用 Windows Scheduler 在用户登录 1 分钟后运行此任务,然后将更新新的命名管道路径(假设您的 Pageant--encrypted
在启动时加载了选项和键)
WinSCP、VS Code 甚至 Windows 命令行 SSH 现在似乎都可以很好地使用 PuTTY/Pageant 密钥。确保将密钥加载到 Pageant 中,并--encrypted
选择延迟提示密码,这样 Windows 重新启动就不会因等待密码而卡住。
答案3
除了@Lee Marske 的回答之外,您可能遇到行尾问题的原因
(请注意,WSL2 具有与 GOW 冲突的 bash 和 sed 可执行文件,并且由于行尾问题似乎无法工作)
是,该文件是以 dos 格式(CR-LF)而不是 UNIX 格式(仅 CR)编写的。
你可以在将输出通过管道传输到 less 中时看到它:
sed -E 's# # \"#g;s#$#"#' pageant.conf |less
您将在行尾看到类似 ^M 的内容。实际上,您用引号代替了 LF。
"dentityAgent "\\.\pipe\pageant.my.name.2db1e00496d5e45bce6db04afef9edba06723774df1cf9a0f03^M
您可以通过搜索 CR 而不是 EOL 来规避(按 CTRL-V M 以获取正确的字符!!!):
sed -E 's# # "#g;s#^M#"#' pageant.conf > pageantfixed.conf
请注意,Putty-agent 的名字是“pageant”而不是“pagent”;-)
顺便说一句:不幸的是,我在这里的名气太小,无法将其添加为评论。