在 PowerShell 中重用 运行 PuTTY 代理(选美)
Reuse in PowerShell a running PuTTY agent (pageant)
PS 5.1 中有没有办法重用 PuTTY 代理密钥?
现在,详情。
要使用密钥代理,需要有一个 Agent 来保存密钥(左框),以及 Client 委托管理的应用程序键(右框)。
例如,客户端应用程序 C1=putty
当然可以使用自己的代理 A1=pageant
。
客户端应用程序 C2=winscp
知道如何直接使用 A1.
某些Client不能直接使用某些Agent,但是有Proxy代理可以弥合差距。
例如,要将 A1 与 C3 一起使用,我需要 Proxy P1=ssh-pageant
,请参见下面的示例。
这有助于将多个客户端的密钥集中在一个代理中。
现在我的意思是为我的所有客户使用 A1(目前,只缺少 A1-C5 和 A1-C6)。
PS 5.1 中有没有办法重用 相同的 PuTTY 代理密钥?
(即使用 A1 和 C5 的代理 Px)
可能有帮助:
https://superuser.com/a/1173570/245595
注释:
我没试过,但似乎 winssh-pageant
是 link A2 的代理,客户端应用程序直接理解 A1。
我目前正在尝试在 PS 中使用来自 msys2 的相同 ssh-pageant
(它最终是一个 Windows 程序,而且他们经常这样做工作),手动替换 eval
在 msys2 中所做的(到目前为止没有运气,但我认为这是可以修复的):
> cd <dir where ssh-pageant is>
> .\ssh-pageant -r -a "$env:USERPROFILE\tmp\.ssh-pageant-$env:USERNAME"
SSH_AUTH_SOCK='C:\Users\USER1\tmp\.ssh-pageant-USER1'; export SSH_AUTH_SOCK;
SSH_PAGEANT_PID=714; export SSH_PAGEANT_PID;
echo ssh-pageant pid 714;
> $env:SSH_AUTH_SOCK='C:\Users\USER1\tmp\.ssh-pageant-USER1'
> $env:SSH_PAGEANT_PID=714
> ssh myserver
Enter passphrase for key 'C:\Users\USER1/.ssh/id_rsa':
作为替代解决方法,是否有非管理员(我不想干涉它)方式将密钥加载到单独的代理中,这样当我开始一个 PS 会话,它使用那些其他键,这允许我继续使用我在 msys2 中重复使用的键?
这可能相当于同时使用两个不同的代理...
weasel-pageant
就是这样一个代理代理(基于Cygwin的ssh-pageant
),对于WSL(A1-C7)...还在寻找[=149的解决方案=].
ssh-agent-wsl
是 weasel-pageant
的一个分支,包括支持使用 Microsoft 的 SSH 代理服务(而不是 PuTTY Pageant)持有的密钥(A2-C7...我想 WSL 需要代理才能使用 Win OpenSSH 代理是很了不起的)。
关于如何使用“代理”代理的示例 ssh-pageant
到 link PuTTY 选美与 Cygwin bash
实现的步骤是:
- 当我在 Windows 开始我的会话时,便携式 PuTTY 代理 (
pageant
) 被执行,同时加载一个密钥。
为此,C:\Users\USER1\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
添加了快捷方式 pageant
,指向 %myputty%\pageant.exe "%mykeys%\key1.ppk"
。
这使得 PuTTY 和 WinSCP 可以使用密钥,例如
但是,如果我现在进入 PS 会话或 msys2/cygwin 终端,则不会使用这些密钥,并且系统会要求我提供这些密钥的密码。
所以如果我现在
$ ssh myserver
Enter passphrase for key 'C:\Users\USER1/.ssh/id_rsa':
- 在 msys2/cygwin 中,我可以使用
ssh-pageant
(“Cygwin/MSYS 的 SSH 身份验证代理 links OpenSSH to PuTTY's Pageant”),这样它就可以重用任何东西先前加载的 PuTTY 代理具有的密钥。
为此,我只是将 eval $(/usr/bin/ssh-pageant -r -a "/tmp/.ssh-pageant-$USERNAME")
添加到我的 msys2 的 ~/.bashrc
中。
现在,每当我启动 msys2 终端时,link PuTTY 的选美 -> ssh-pageant 都会建立,几个环境变量是已创建,我可以 ssh
无需输入密码
$ env | grep -i ssh
SSH_AUTH_SOCK=/tmp/.ssh-pageant-USER1
SSH_PAGEANT_PID=960
$ ssh myserver
Welcome to Ubuntu 20.04 LTS (GNU/Linux 5.4.0-40-generic x86_64)
...
- 从this来看,似乎Git bash.
也可以达到同样的效果
相关:
http://rabexc.org/posts/pitfalls-of-ssh-agents
https://superuser.com/questions/1293725/gpg-agent-under-windows-as-ssh-agent-for-git-bash
我在 PS 会话中使用相同的 Cygwin 工具(即 ssh-pageant
和 Cygwin OpenSSH 客户端)完成了这项工作。
所以我会这样做(假设 ssh-pageant
已经是来自 Msys2 的 运行):
> cd <dir where ssh-pageant is>
> .\ssh-pageant -r -a "$env:USERPROFILE\tmp\.ssh-pageant-$env:USERNAME"
SSH_AUTH_SOCK='C:\Users\USER1\tmp\.ssh-pageant-USER1'; export SSH_AUTH_SOCK;
> $env:SSH_AUTH_SOCK='C:\Users\USER1\tmp\.ssh-pageant-USER1'
> .\ssh myserver
Logged in to myserver
我已将此添加到我的 profile.ps1
(同样,当我开始 PS 会话时 ssh-pageant
已经 运行 时它会起作用)
$env:MSYS2_DIR=<mydir>
# Assuming a proxy ssh agent is already running
$env:SSH_AUTH_SOCK="$env:MSYS2_DIR\tmp\.ssh-pageant-$env:USERNAME"
# We have to make sure we use Msys2 OpenSSH ssh client, not Windows OpenSSH ssh client
function ssh_msys2 {
& $env:MSYS2_DIR\usr\bin\ssh.exe $args
}
如果 ssh-pageant
尚未激活,此 应该 工作(尚未测试;PID 编号可能不同):
> cd <dir where ssh-pageant is>
> .\ssh-pageant -r -a "$env:USERPROFILE\tmp\.ssh-pageant-$env:USERNAME"
SSH_AUTH_SOCK='C:\Users\USER1\tmp\.ssh-pageant-USER1'; export SSH_AUTH_SOCK;
SSH_PAGEANT_PID=714; export SSH_PAGEANT_PID;
echo ssh-pageant pid 714;
> $env:SSH_AUTH_SOCK='C:\Users\USER1\tmp\.ssh-pageant-USER1'
> $env:SSH_PAGEANT_PID=714
> .\ssh myserver
Logged in to myserver
还有几个要点要测试,自动化操作。
特别是,执行 ssh-pageant
,检测返回的 PID #,如果是,则从 PS 设置环境变量 SSH_PAGEANT_PID
。
这比在 Msys2 中要麻烦一点,因为 ssh-pageant
吐出一些可由 bash 直接执行的东西。
PS 5.1 中有没有办法重用 PuTTY 代理密钥?
现在,详情。
要使用密钥代理,需要有一个 Agent 来保存密钥(左框),以及 Client 委托管理的应用程序键(右框)。
例如,客户端应用程序 C1=putty
当然可以使用自己的代理 A1=pageant
。
客户端应用程序 C2=winscp
知道如何直接使用 A1.
某些Client不能直接使用某些Agent,但是有Proxy代理可以弥合差距。
例如,要将 A1 与 C3 一起使用,我需要 Proxy P1=ssh-pageant
,请参见下面的示例。
这有助于将多个客户端的密钥集中在一个代理中。
现在我的意思是为我的所有客户使用 A1(目前,只缺少 A1-C5 和 A1-C6)。
PS 5.1 中有没有办法重用 相同的 PuTTY 代理密钥? (即使用 A1 和 C5 的代理 Px)
可能有帮助: https://superuser.com/a/1173570/245595
注释:
我没试过,但似乎
winssh-pageant
是 link A2 的代理,客户端应用程序直接理解 A1。我目前正在尝试在 PS 中使用来自 msys2 的相同
ssh-pageant
(它最终是一个 Windows 程序,而且他们经常这样做工作),手动替换eval
在 msys2 中所做的(到目前为止没有运气,但我认为这是可以修复的):
> cd <dir where ssh-pageant is>
> .\ssh-pageant -r -a "$env:USERPROFILE\tmp\.ssh-pageant-$env:USERNAME"
SSH_AUTH_SOCK='C:\Users\USER1\tmp\.ssh-pageant-USER1'; export SSH_AUTH_SOCK;
SSH_PAGEANT_PID=714; export SSH_PAGEANT_PID;
echo ssh-pageant pid 714;
> $env:SSH_AUTH_SOCK='C:\Users\USER1\tmp\.ssh-pageant-USER1'
> $env:SSH_PAGEANT_PID=714
> ssh myserver
Enter passphrase for key 'C:\Users\USER1/.ssh/id_rsa':
作为替代解决方法,是否有非管理员(我不想干涉它)方式将密钥加载到单独的代理中,这样当我开始一个 PS 会话,它使用那些其他键,这允许我继续使用我在 msys2 中重复使用的键? 这可能相当于同时使用两个不同的代理...
weasel-pageant
就是这样一个代理代理(基于Cygwin的ssh-pageant
),对于WSL(A1-C7)...还在寻找[=149的解决方案=].ssh-agent-wsl
是weasel-pageant
的一个分支,包括支持使用 Microsoft 的 SSH 代理服务(而不是 PuTTY Pageant)持有的密钥(A2-C7...我想 WSL 需要代理才能使用 Win OpenSSH 代理是很了不起的)。
关于如何使用“代理”代理的示例 ssh-pageant
到 link PuTTY 选美与 Cygwin bash
实现的步骤是:
- 当我在 Windows 开始我的会话时,便携式 PuTTY 代理 (
pageant
) 被执行,同时加载一个密钥。 为此,C:\Users\USER1\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
添加了快捷方式pageant
,指向%myputty%\pageant.exe "%mykeys%\key1.ppk"
。
这使得 PuTTY 和 WinSCP 可以使用密钥,例如 但是,如果我现在进入 PS 会话或 msys2/cygwin 终端,则不会使用这些密钥,并且系统会要求我提供这些密钥的密码。 所以如果我现在
$ ssh myserver
Enter passphrase for key 'C:\Users\USER1/.ssh/id_rsa':
- 在 msys2/cygwin 中,我可以使用
ssh-pageant
(“Cygwin/MSYS 的 SSH 身份验证代理 links OpenSSH to PuTTY's Pageant”),这样它就可以重用任何东西先前加载的 PuTTY 代理具有的密钥。
为此,我只是将eval $(/usr/bin/ssh-pageant -r -a "/tmp/.ssh-pageant-$USERNAME")
添加到我的 msys2 的~/.bashrc
中。 现在,每当我启动 msys2 终端时,link PuTTY 的选美 -> ssh-pageant 都会建立,几个环境变量是已创建,我可以ssh
无需输入密码
$ env | grep -i ssh
SSH_AUTH_SOCK=/tmp/.ssh-pageant-USER1
SSH_PAGEANT_PID=960
$ ssh myserver
Welcome to Ubuntu 20.04 LTS (GNU/Linux 5.4.0-40-generic x86_64)
...
- 从this来看,似乎Git bash. 也可以达到同样的效果
相关:
http://rabexc.org/posts/pitfalls-of-ssh-agents
https://superuser.com/questions/1293725/gpg-agent-under-windows-as-ssh-agent-for-git-bash
我在 PS 会话中使用相同的 Cygwin 工具(即 ssh-pageant
和 Cygwin OpenSSH 客户端)完成了这项工作。
所以我会这样做(假设 ssh-pageant
已经是来自 Msys2 的 运行):
> cd <dir where ssh-pageant is>
> .\ssh-pageant -r -a "$env:USERPROFILE\tmp\.ssh-pageant-$env:USERNAME"
SSH_AUTH_SOCK='C:\Users\USER1\tmp\.ssh-pageant-USER1'; export SSH_AUTH_SOCK;
> $env:SSH_AUTH_SOCK='C:\Users\USER1\tmp\.ssh-pageant-USER1'
> .\ssh myserver
Logged in to myserver
我已将此添加到我的 profile.ps1
(同样,当我开始 PS 会话时 ssh-pageant
已经 运行 时它会起作用)
$env:MSYS2_DIR=<mydir>
# Assuming a proxy ssh agent is already running
$env:SSH_AUTH_SOCK="$env:MSYS2_DIR\tmp\.ssh-pageant-$env:USERNAME"
# We have to make sure we use Msys2 OpenSSH ssh client, not Windows OpenSSH ssh client
function ssh_msys2 {
& $env:MSYS2_DIR\usr\bin\ssh.exe $args
}
如果 ssh-pageant
尚未激活,此 应该 工作(尚未测试;PID 编号可能不同):
> cd <dir where ssh-pageant is>
> .\ssh-pageant -r -a "$env:USERPROFILE\tmp\.ssh-pageant-$env:USERNAME"
SSH_AUTH_SOCK='C:\Users\USER1\tmp\.ssh-pageant-USER1'; export SSH_AUTH_SOCK;
SSH_PAGEANT_PID=714; export SSH_PAGEANT_PID;
echo ssh-pageant pid 714;
> $env:SSH_AUTH_SOCK='C:\Users\USER1\tmp\.ssh-pageant-USER1'
> $env:SSH_PAGEANT_PID=714
> .\ssh myserver
Logged in to myserver
还有几个要点要测试,自动化操作。
特别是,执行 ssh-pageant
,检测返回的 PID #,如果是,则从 PS 设置环境变量 SSH_PAGEANT_PID
。
这比在 Msys2 中要麻烦一点,因为 ssh-pageant
吐出一些可由 bash 直接执行的东西。