如何以及在哪里可以查看ssh-add已为ssh-agent添加了哪些键?

#1 楼

-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文件中的格式相同。

评论


[rahul @ srv1〜] $ ssh-add -l无法打开与身份验证代理的连接。

–拉胡尔·帕蒂尔(Rahul Patil)
2012年12月20日上午11:11

@RahulPatil您是否在该计算机上运行SSH代理?在添加密钥的同一台计算机上运行此命令,而不是在远程计算机上运行!

– Gertvdijk
2012年12月20日11:18



如果启用了密钥代理转发,则可以在远程主机上运行此命令。

–随钻
13年3月30日在19:58

示例:ssh-agent sh -c'ssh-add; ssh-add -l'

– Kenorb
15年3月26日在21:15

@gertvdijk我实际上是在谈论命名。从名称ssh-add看来,此命令应仅将密钥添加到代理。然后ssh-agent应该知道它持有什么键。我的看法是不同的。

– Shiplu Mokaddim
16年5月6日在13:43

#2 楼

令人惊讶的是,ssh-add的MacOS版本在某些时候停止显示文件名,与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')" "$file";
        done | column -t | grep --color=auto "$line" || echo "$line";
    done < <(ssh-add -l | awk '{print }')
}


示例

$  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个循环。外环是一个while,它接收ssh-add的输出。此输出是加载到ssh-agent中的SSH密钥的所有指纹。

内部循环是for循环,该循环穿过与该模式~/.ssh/*.pub匹配的所有文件的内容。对于每个文件,我们使用ssh-keygen -lf <file>对其进行查询,然后删除此输出的第一列:


4096 SHA256:mwvSCr2CXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX myuser @ mydom.lan


...之后...



SHA256:mwvSCr2CXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX myuser@mydom.lan


然后将这个字符串与文件名一起打印:


printf“%s%s \ n”“ $(ssh-keygen -lf” $ file “ | awk'{$ 1 =”“} 1')”“ $ file”


执行此循环的末尾是:


|列-t | grep“ $ line” || echo“ $ line”


这将格式化输出,使其采用列格式(column -t)。

至此,我们将通过ssh-add查看来自grep "$line"的指纹输出。如果找到匹配项,则打印printf输出,否则退回到仅打印ssh-add$line的原始指纹。

参考文献


检查ssh公钥指纹


评论


发生的是,OpenSSH采用了一种新的私钥存储格式,该格式支持私钥内部的注释,如果您没有密码短语,则当然不能更改它。如果私钥以这种新文件格式存储(可以通过文件顶部的BEGIN OPENSSH私钥识别),则ssh-add -l将显示它;如果不是,它将显示从中加载密钥的文件的名称。

–马克·里德(Mark Reed)
20 Dec 9'在20:31