Ssh

如何獲取 .ssh/authorized_keys(2) 文件的所有指紋

  • December 31, 2021

有沒有一種簡單的方法來獲取在 .ssh/authorized_keys || 中輸入的所有指紋的列表 .ssh/authorized_keys2 文件?

ssh-keygen -l -f .ssh/authorized_keys 

只會返回第一行/條目/公鑰的指紋

用 awk 破解:

awk 'BEGIN { 
   while (getline < ".ssh/authorized_keys") {
       if ($1!~"ssh-(r|d)sa") {continue}
       print "Fingerprint for "$3
       system("echo " "\""$0"\"> /tmp/authorizedPublicKey.scan; \
           ssh-keygen -l -f /tmp/authorizedPublicKey.scan; \
           rm /tmp/authorizedPublicKey.scan"
       )
   }
}'

但是我沒有找到更簡單的方法或 ssh 命令嗎?

這是另一個使用沒有臨時文件的普通 bash 的 hack:

while read l; do
 [[ -n $l && ${l###} = $l ]] && ssh-keygen -l -f /dev/stdin <<<$l;
done < .ssh/authorized_keys

您可以輕鬆地使其成為您的功能.bashrc

function fingerprints() {
 local file="${1:-$HOME/.ssh/authorized_keys}"
 while read l; do
   [[ -n $l && ${l###} = $l ]] && ssh-keygen -l -f /dev/stdin <<<$l
 done < "${file}"
}

並呼叫它:

$ fingerprints .ssh/authorized_keys

基於ℝaphink 的答案和*man xargs → 範例**中的/dev/stdin*技巧的單線:

egrep '^[^#]' ~/.ssh/authorized_keys | xargs -n1 -I% bash -c 'ssh-keygen -l -f /dev/stdin <<<"%"'

引用自:https://serverfault.com/questions/413231