检查 ssh 密钥是否有密码

检查 ssh 密钥是否有密码

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

我想要做的是让该脚本在接受和分发公钥之前检查任何给定用户的 ssh 密钥是否有密码。

我尝试了许多方法,例如使用ssh-agent和,然后当要求输入密码ssh-add时就会出现问题。ssh-add

有没有办法得到类似检查密码的东西,如果密钥有密码,openssl则会稍微失败并返回代码?1

谢谢!

答案1

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

因此,您可以通过运行密钥文件findgrep查看其是否具有字符串“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

相关内容