检查 ssh 密钥是否有密码

Pet*_*mer 8 ssh ssl openssh openssl

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

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

我已经尝试了一些东西,比如使用ssh-agentssh-add然后当问题出现ssh-add被要求密码。

有没有办法让openssl检查密码短语,1如果密钥有密码短语的返回码稍微失败?

谢谢!

Jaw*_*awa 11

如果密钥文件使用密码短语,则它具有“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
Run Code Online (Sandbox Code Playgroud)

打印具有密码短语的文件列表。然后,您可以将它们与所有密钥文件的列表进行匹配,以挑出那些不使用密码短语的文件。例如,通过将-exec参数排除在外,可以获得所有密钥文件的列表,如下所示:

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

  • 不再可能使用新的 SSH 密钥格式,尽管已加密,但 `Proc-Type` 标头不会写入文件。 (2认同)