如何确定某人的 SSH 密钥是否包含空密码?

如何确定某人的 SSH 密钥是否包含空密码?

我的一些 Linux 和 FreeBSD 系统有几十个用户。工作人员将使用这些“ssh 网关”节点通过 SSH 访问其他内部服务器。

我们担心其中一些人使用未加密的 SSH 私钥(没有密钥的密钥)密码短语这不好,因为如果破解者能够访问他们在这台计算机上的帐户,他们就可以窃取私钥,并且现在可以访问使用同一密钥的任何计算机。出于安全原因,我们要求所有用户使用密码加密其 SSH 私钥。

如何判断私钥是否未加密(例如不包含密码)?与非 ASCII 铠装钥匙相比,是否有不同的方法可以在 ASCII 铠装钥匙上执行此操作?

更新:

为了澄清这一点,假设我拥有机器上的超级用户访问权限,并且我可以读取每个人的私钥。

答案1

嗯,密码为空的 OpenSSH 私钥实际上并未加密。

加密的私钥在私钥文件中如此声明。例如:

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: DES-EDE3-CBC,7BD2F97F977F71FC

BT8CqbQa7nUrtrmMfK2okQLtspAsZJu0ql5LFMnLdTvTj5Sgow7rlGmee5wVuqCI
/clilpIuXtVDH4picQlMcR+pV5Qjkx7BztMscx4RCmcvuWhGeANYgPnav97Tn/zp
...
-----END RSA PRIVATE KEY-----

所以像

# grep -L ENCRYPTED /home/*/.ssh/id_[rd]sa

应该可以解决问题。

答案2

我到处寻找这个问题,但从未找到令人满意的答案,但我设法构建了一个答案,所以......

请注意,如果有效,这将更新文件,因此,如果您不想被您正在测试其密钥的用户注意到,您可能需要先复制密钥。 OTOH,由于您刚刚使用无密码密钥捕获了您的用户,也许您并不关心他们是否注意到。 :D

$ ssh-keygen -p -P '' -N '' -f ~/.ssh/KEYTEST
Key has comment '/home/rlpowell/.ssh/KEYTEST'
Your identification has been saved with the new passphrase.
$ echo $?
0

$ ssh-keygen -p -P '' -N '' -f ~/.ssh/KEYTEST
Bad passphrase.
$ echo $?
1

答案3

我想,如果您有权访问私钥,您可以使用它而无需密码短语来根据公钥进行身份验证。如果这有效,您就知道它没有密码。如果有,它会给你一条错误消息。

如果您无权访问私钥,我怀疑您能否检测到这一点。密码的目的是“解锁”私钥,它对公钥没有任何作用。

事实上,如果这样做的话,系统的安全性就会降低。人们可以使用公钥,该公钥可用于尝试发起暴力破解或其他攻击以试图破解密码。

相关内容