![测试SSH私钥是否有密码保护](https://linux22.com/image/114439/%E6%B5%8B%E8%AF%95SSH%E7%A7%81%E9%92%A5%E6%98%AF%E5%90%A6%E6%9C%89%E5%AF%86%E7%A0%81%E4%BF%9D%E6%8A%A4.png)
我正在尝试测试是否~/.ssh/id_rsa
确实受密码保护。
当你运行时,ssh-keygen
你可以选择一个空密码,我正在尝试检测这一点。
单行线可以做到这一点吗?
答案1
如果执行:
ssh-keygen -y -f ~/.ssh/name_of_key
如果没有密码,您将获得打印密钥,如下所示:
ssh-keygen -y -f ~/.ssh/id_dsa
ssh-dss AAAAB3NzaC1kc3M....
如果有密钥密码,系统会要求您输入密码
答案2
如果您在文本编辑器中打开私钥文件,您将能够ENCRYPTED
在 RSA/DSA 密钥文件的第二行中看到。例如:
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,373B504621779D53C72BADE597C531A0
答案3
我没有足够的声誉来发表评论,所以我在这里添加。
感谢@Ulrich-Schwarz,我扩展了他的答案来检查我的 $HOME/.ssh/ 中的所有密钥(我生成的密钥,所以我有公共/私有对):
for l in $(ls $HOME/.ssh/*.pub)
do key=${l%.*}
if SSH_ASKPASS=/bin/false ssh-keygen -y -f $key < /dev/null > /dev/null 2>&1
then
echo -n "NO password: "
else
echo -n "YES password: "
fi
echo ${key}
done