我在使用 SSH 时遇到了一个奇怪的问题。
我正在使用ssh-keygen -lf id_rsa
我的私人 ssh 密钥生成公共指纹id_rsa
。
但是,无论我如何替换或更改我的私钥文件的内容id_rsa
,该ssh-keygen -l
命令都会给出相同的结果。
就像密钥或指纹以某种方式被缓存一样。
到底是怎么回事?
答案1
我在写问题的时候发现了答案。
如果您没有与您的私钥相对应的公钥文件(id_rsa.pub
在此示例中),那么ssh-keygen -l
将根据您的私钥计算公钥,并使用这个计算出的公钥来计算公钥指纹,正如预期的那样。
但是,如果您确实有一个公钥文件(例如id_rsa.pub
),那么ssh-keygen -l
就不会费心计算公钥,而是使用公钥文件来获取指纹。
这是一个奇怪的行为,因为您可能需要的所有数据都在私钥中,并且从私钥计算公钥并不需要很长时间。它也不会检查私钥和公钥是否真的匹配。但是,这种奇怪的行为实际上记录在 的手册页中ssh-keygen
。所以,基本上,是的,有一个缓存:缓存是公钥文件(例如id_rsa.pub
)。
您可以安全地删除公钥文件并使用重新生成它ssh-keygen -y -f id_rsa > id_rsa.pub
。