我有一个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的指纹识别:
请注意,该命令将与使用密码而不使用代理的私钥断开。 它应该使用由AWS或OpenStack生成的不使用密码的pem文件。
有关更多信息,请参阅https://stackoverflow.com/questions/2635360/ssh-keygen-accepting-stdin 。
您不会从私钥文件中获取指纹,而是从公钥文件中获取指纹。
事实上,ssh-keygen已经告诉过你这个:
./query.pem不是公钥文件。
运行它对公众的一半关键,它应该工作。
更一般地说
想一想:指纹存在的原因是你可以识别公钥。 事实上,除了对服务器没有用处(甚至没有私钥),对私钥进行散列(hash)是一个潜在的安全问题。
一旦你拥有了公钥,这个过程就是validation客户端是否拥有相应的私钥。 由于您已经知道您正在validation哪些密钥,因此您不需要指纹。