PEM ssh密钥的指纹

我有一个PEM文件,我将其添加到正在运行的ssh-agent中:

$ file query.pem query.pem: PEM RSA private key $ ssh-add ./query.pem Identity added: ./query.pem (./query.pem) $ ssh-add -l | grep query 2048 ef:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX ./query.pem (RSA) 

如何直接从文件中获得密钥的指纹(我在ssh-agent中看到的)? 我知道ssh-keygen -l -f some_key适用于“普通”ssh密钥,但不适用于PEM文件。

如果我在.pem文件上尝试ssh-keygen,我会得到:

 $ ssh-keygen -l -f ./query.pem key_read: uudecode PRIVATE KEY----- failed key_read: uudecode PRIVATE KEY----- failed ./query.pem is not a public key file. 

这个键开始于:

 -----BEGIN RSA PRIVATE KEY----- MIIEp.... etc. 

而不是一个“常规”的私人密钥,这看起来像:

 -----BEGIN RSA PRIVATE KEY----- Proc-Type: 4,ENCRYPTED DEK-Info: AES-128-CBC,E15F2.... etc. 

如果要检索丢失的公钥文件的指纹,可以从私钥文件中恢复 :

 $ ssh-keygen -yf path/to/private_key_file > path/to/store/public_key_file 

那么你可以确定公开的指纹:

 $ ssh-keygen -lf path/to/store/public_key_file 

AWS的“ validation您的密钥对的指纹 ”提供了两个解决问题的方法,具体取决于密钥的创build方式。

如果您使用AWS创build密钥对:

 $ openssl pkcs8 -in query.pem -inform PEM -outform DER -topk8 -nocrypt | openssl sha1 -c xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx 

或者,如果您使用第三方工具创build了密钥对:

 $ openssl rsa -in query.pem -pubout -outform DER | openssl md5 -c writing RSA key xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx 

(在上面的输出中编辑的指纹)

这里是一个应该做你想做的事情,而不需要在本地创build一个公钥文件。

 $ ssh-keygen -lf /dev/stdin <<< $( ssh-keygen -f ~/.ssh/keyname.pem -y ) 2048 14:df:c7:b7:f1:26:7f:87:d5:e7:10:6c:ac:af:a2:03 /dev/stdin (RSA) 

这里使用bash这个string<<<以使stdin作为常规文件( /dev/stdin )而不是pipe道可用,因为ssh-keygen只能在文件上运行。

从openssh的7.2版开始, ssh-keygen支持来自标准input的指纹识别:

  • ssh-keygen(1):允许从标准input指纹,例如“ssh-keygen -lf – ”

请注意,该命令将与使用密码而不使用代理的私钥断开。 它应该使用由AWS或OpenStack生成的不使用密码的pem文件。

有关更多信息,请参阅https://stackoverflow.com/questions/2635360/ssh-keygen-accepting-stdin

您不会从私钥文件中获取指纹,而是从公钥文件中获取指纹。

事实上,ssh-keygen已经告诉过你这个:

./query.pem不是公钥文件。

运行它对公众的一半关键,它应该工作。

更一般地说

想一想:指纹存在的原因是你可以识别公钥。 事实上,除了对服务器没有用处(甚至没有私钥),对私钥进行散列(hash)是一个潜在的安全问题。

一旦你拥有了公钥,这个过程就是validation客户端是否拥有相应的私钥。 由于您已经知道您正在validation哪些密钥,因此您不需要指纹。