Ssh
如何獲取 .ssh/authorized_keys(2) 文件的所有指紋
有沒有一種簡單的方法來獲取在 .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 <<<"%"'