检查SSH密钥是否有密码短语


8

我有一堆用户,他们使用SSH密钥可以访问其他服务器上的帐户。目前,我有一个脚本,该脚本收集ssh公钥并将它们分发到正确服务器上的正确帐户。

我想要做的是获取该脚本,以在接受公共密钥并将其分发之前检查任何给定的用户ssh密钥是否具有密码短语。

我已经尝试了许多方法,例如使用ssh-agentand ssh-add,然后在ssh-add要求输入密码时出现问题。

有没有办法获得类似openssl检查密码的信息,并1通过密钥是否具有密码的返回码稍微失败?

谢谢!


你可以澄清的要求是否密码或没有拥有它-因为什么原因呢?
user1686

grawity:我的要求是确保用户已在其ssh密钥上设置了密码短语,只有具有密码短语的密钥才会分发到其他服务器。
彼得·法默

Answers:


11

如果密钥文件使用密码短语,则将设置“ Proc-Type:”属性,并附加单词“ ENCRYPTED”。

所以,你可以决定是否使用密钥文件通过运行其密码短语find,并grep看它是否有字符串“ENCRYPTED”。

# list keyfiles that USE a passphrase
HOMES=/home /mnt/nfs_home
find $HOMES -maxdepth 3 -type f -path '*/.ssh/id* -name "id_[dr]sa*" -exec grep -q "ENCRYPTED" {} \; -print

打印具有密码短语的文件列表。然后,您可以将它们与所有密钥文件列表进行匹配,以挑选出不使用密码短语的密钥文件。例如,可以通过-exec省略参数来获取所有密钥文件的列表,如下所示:

# list all keyfiles
HOMES=/home /mnt/nfs_home
find $HOMES -maxdepth 3 -type f -path '*/.ssh/id* -name "id_[dr]sa*" -print

新的SSH密钥格式不再可用Proc-Type,即使已加密,标头也不会写入文件。
Oneiroi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.