通过 PowerShell 通过 SSH 连接时将 Pageant 与 Windows OpenSSH 结合使用

通过 PowerShell 通过 SSH 连接时将 Pageant 与 Windows OpenSSH 结合使用

我一直在使用 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-configPageant 选项创建)。此脚本在命名管道路径周围添加双引号。请注意,命名管道路径每次重新启动都会发生变化,因此您需要在每次启动后运行此脚本。我使用的是bashGOWsed包中的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”;-)

顺便说一句:不幸的是,我在这里的名气太小,无法将其添加为评论。

相关内容