Ssh

如何使用 ssh-add 列出添加到 ssh-agent 的密鑰?

  • February 8, 2020

我如何以及在哪裡可以檢查哪些密鑰已添加ssh-add到我的ssh-agent?

使用-l選項ssh-add按指紋列出它們。

$ ssh-add -l
2048 72:...:eb /home/gert/.ssh/mykey (RSA)

或使用-L以獲取 OpenSSH 格式的完整密鑰。

$ ssh-add -L
ssh-rsa AAAAB3NzaC1yc[...]B63SQ== /home/gert/.ssh/id_rsa

後一種格式與您將它們放入~/.ssh/authorized_keys文件中的格式相同。

令人驚訝的是,MacOS 版本ssh-add在某些時候停止顯示文件名,就像 Linux 變體一樣。我編寫了這個腳本,它對在~/.ssh/.

我用文件呼叫函式ssh-add_wf,wf =。該功能的詳細資訊如下:

$ type ssh-add_wf
ssh-add_wf is a function
ssh-add_wf ()
{
   while read -r line; do
       for file in ~/.ssh/*.pub;
       do
           printf "%s %s\n" "$(ssh-keygen -lf "$file" | awk '{$1=""}1')" "$file";
       done | column -t | grep --color=auto "$line" || echo "$line";
   done < <(ssh-add -l | awk '{print $2}')
}

例子

$  ssh-add_wf
SHA256:mwvSCr2CXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  myuser@mydom.lan  (RSA)  /Users/myuser/.ssh/ssh_myuser@mydom.lan_id_rsa.pub
SHA256:qInIrnKcXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  myuser@mydom.com  (RSA)  /Users/myuser/.ssh/github_myuser@mydom.com_id_rsa.pub
SHA256:tX+AAJA0XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
SHA256:EyNkhTLQXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX  myuser@mydom.com  (RSA)  /Users/myuser/.ssh/ssh_myuser@mydom.com_id_rsa.pub
SHA256:KKKVwtvFXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
SHA256:tr0hZP52XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

ssh-add上面,與目錄中的文件匹配的輸出中的任何鍵都~/.ssh/將在第 4 列的輸出中包含文件名。任何沒有的鍵都會使該列為空。在此輸出中,我們有 3 個具有匹配文件的鍵。

功能力學

該腳本使用 2 個循環。外部循環是 a while,它接受 的輸出ssh-add。此輸出是載入到ssh-agent.

內部循環是一個for循環,它遍歷與此模式匹配的所有文件的內容,~/.ssh/*.pub. 對於每個文件,我們都會對其進行詢問,ssh-keygen -lf <file>然後刪除此輸出的第一列:

…前…

4096 SHA256:mwvSCr2CXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

…後…

SHA256:mwvSCr2CXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX myuser@mydom.lan

然後將此字元串與文件名一起列印:

printf “%s %s\n” " $ (ssh-keygen -lf " $ 文件" | awk ‘{ $ 1=""}1’)" " $ 文件”

在這個循環的執行結束時如下:

| 列-t | grep" $ line" || echo " $ 線”

這會格式化輸出,使其成為列格式 ( column -t)。

在這一點上,我們ssh-add通過grep "$line". 如果找到匹配,我們列印我們的printf輸出,否則我們回退到只列印來自ssh-add,的原始指紋$line

參考

引用自:https://unix.stackexchange.com/questions/58969