我有一群用户,他们有 SSH 密钥可以访问其他服务器上的帐户。目前我有一个脚本,可以收集 ssh 公钥并将其分发到正确服务器上的正确帐户。
我想要做的是让该脚本在接受和分发公钥之前检查任何给定用户的 ssh 密钥是否有密码。
我尝试了许多方法,例如使用ssh-agent
和,然后当要求输入密码ssh-add
时就会出现问题。ssh-add
有没有办法得到类似检查密码的东西,如果密钥有密码,openssl
则会稍微失败并返回代码?1
谢谢!
答案1
如果密钥文件使用密码,则其“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