[英]Reuse in PowerShell a running PuTTY agent (pageant)
PS 5.1 中有沒有辦法重用PuTTY 代理密鑰?
現在,細節。
要使用密鑰代理,需要有一個持有密鑰的代理(左框)和委托管理密鑰的客戶端應用程序(右框)。 例如,客戶端應用程序 C1= putty
當然可以使用它自己的代理 A1= pageant
。 客戶端應用程序 C2= winscp
知道如何直接使用 A1。
某些客戶不能直接使用某些代理,但有一些代理可以彌補這一差距。 例如,要將 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
是一個代理,可以將 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 session 時,它會使用其他密鑰,這允許我保留在 msys2 中使用我重復使用的密鑰? 這可能相當於同時使用兩個不同的代理......
weasel-pageant
就是這樣一個代理(基於 Cygwin 的ssh-pageant
),用於 WSL(A1-C7)......仍在尋找 PS 的解決方案。
ssh-agent-wsl
是weasel-pageant
的一個分支,包括支持使用 Microsoft 的 SSH 代理服務(而不是 PuTTY Pageant)(A2-C7 ......代理人)。
如何使用“代理”代理ssh-pageant
將 PuTTY 選美與 Cygwin bash 鏈接的示例
實現這一目標的步驟是:
pageant
)被執行,同時一鍵加載。 為此,將快捷方式pageant
添加到C:\Users\USER1\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
,指向%myputty%\pageant.exe "%mykeys%\key1.ppk"
。 $ ssh myserver
Enter passphrase for key 'C:\Users\USER1/.ssh/id_rsa':
ssh-pageant
(“將 OpenSSH 鏈接到 PuTTY 的 Pageant 的 Cygwin/MSYS 的 SSH 身份驗證代理”),這樣它就可以重用之前加載的 PuTTY 代理所擁有的任何密鑰。eval $(/usr/bin/ssh-pageant -r -a "/tmp/.ssh-pageant-$USERNAME")
添加到我的~/.bashrc
的 msys2 中。 現在每當我啟動一個 msys2 終端時, PuTTY's Pageant -> 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)
...
相關:
http://rabexc.org/posts/pitfalls-of-ssh-agents
如何檢查 ssh-agent 是否已經在 bash 中運行?
https://superuser.com/questions/1293725/gpg-agent-under-windows-as-ssh-agent-for-git-bash
我在 PS session 中使用相同的 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 直接執行的東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.