最佳实践:“每个主机和用户单独的 ssh-key”与“所有主机一个 ssh-key”

信息安全 隐私 SSH 密钥管理 匿名 密钥生成
2021-08-25 22:42:02

是为每个主机和用户创建一个单独的 SSH 密钥,还是只使用id_rsa所有主机的密钥进行身份验证更好?id_rsa隐私/匿名政策是否存在不当行为

所有主机都有一个 ssh-key:

~/.ssh/id_rsa
~/.ssh/id_rsa.pub

与单独的 ssh 密钥相比:

~/.ssh/user1_host1
~/.ssh/user1_host1.pub
~/.ssh/user2_host1
~/.ssh/user2_host1.pub
~/.ssh/user3_host2
~/.ssh/user3_host2.pub
~/.ssh/user4_host3
~/.ssh/user4_host3.pub
... etc.
4个回答

私钥对应于给定用户的单个“身份”,无论这对您意味着什么。如果对您来说,“身份”是一个人,或者是一台机器上的一个人,或者可能是在一台机器上运行的应用程序的单个实例。粒度级别由您决定。

就安全性而言,您不会以任何方式破坏您的密钥[1]通过使用它登录机器(就像您使用密码一样),因此为不同的目的地拥有单独的密钥不会从身份验证/安全的角度来看,您会更加安全。

尽管为多台机器授权相同的密钥确实证明了同一个密钥持有者可以从取证的角度访问两台机器。通常这不是问题,但值得指出。

此外,授权单个密钥的位置越多,该密钥就越有价值。如果该密钥被泄露,更多目标将面临风险。

此外,私钥存储的位置越多(例如,您的工作计算机、笔记本电脑和备份存储),攻击者获取副本的位置就越多。所以这也值得考虑。

至于如何运行安全的普遍适用的指导方针:没有。您添加的额外安全性越多,您放弃的便利就越多。我可以明确给出的一条建议是:保持你的私钥加密。那里增加的安全性非常重要。


[1]:在不同的安全上下文中授权相同的 SSH 密钥可能是一个重要的问题,这个问题与代理转发有关。不过,安全使用代理转发的限制和注意事项超出了这个问题的范围。

我觉得这个问题可以从两个不同的角度来考虑:安全性便利性

当我们创建一个 SSH 密钥对时,我们被要求提供一个密码以添加更多层来保护私钥,如下所示:

$ ssh-keygen -t rsa -b 4096 -C 'With_OR_Without_Passwd'
Generating public/private rsa key pair.
Enter file in which to save the key (/Your/HomeDir/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):

虽然有明确提示要求输入密码,但一些(或许多)人仍然更关注括号中的信息:(empty for no passphrase),并遵循该建议。

结合是否使用多个 SSH 密钥对是否输入额外的 passwd,我们至少有四种方法可以走。让我们假设所有密钥对和config文件都存储在~/.ssh/.

现在让我们先不考虑安全性

下表给出了关于安全性的简单排名(数字越大表示越安全):

Security     Ways to go
   1         One   SSH key-pair  (NO passwd)
   1         Multi SSH key-pairs (NO passwd)
   2         One   SSH key-pair  (WITH passwd)
   2         Multi SSH key-pairs (WITH passwd) (SAME passwd)
   3         Multi SSH key-pairs (WITH passwd) (DIFF passwds)

如果没有 passwd,如果我们的系统被某人入侵,那么断路器可以获取我们所有的私钥和配置,以及远程服务器的身份验证。所以在这种情况下,One key-pair 和 Multi key-pairs 是相同的。最安全的方法是对不同的 ssh 密钥对使用不同的密码。

那就别想方便了。

但是更多的密钥对和更多的密码也让我们的生活变得不那么方便,下表给出了安全性的简单排名(数字越大意味着越安全):

Convenient  Security  Ways to go
   5           1      One   SSH key-pair  (NO passwd)
   4           2      One   SSH key-pair  (WITH passwd)
   3           1      Multi SSH key-pairs (NO passwd)
   2           2      Multi SSH key-pairs (WITH passwd) (SAME passwd)
   1           3      Multi SSH key-pairs (WITH passwd) (DIFF passwds)

因此,一般情况下,如果我们必须同时兼顾安全性便利性,我们可以将这两个分数相乘,也许One SSH key-pair (WITH passwd)是一个不错的选择。

您只需要一把钥匙,因为钥匙属于您的用户。

每个主机拥有一个密钥没有必要(也没有提高安全性)。

只要您的私钥保持私密,您就可以使用这个单一密钥并使用它来针对多个主机验证您自己。

根据经验,我同意其他答案——每个用户一个键通常是最实用的方法。然而,它并不是一种万能的方法。

以下是一些额外的注意事项。

  • 如果您使用的是 SSH 代理,超过三个或四个密钥就会出现问题,因为当连接到服务器时,您的 SSH 客户端可能会依次尝试其中一个存储的密钥。这可能会导致服务器端多次登录失败,并且您实际上可能会发现您的帐户在 SSH 甚至尝试正确的密钥之前就被锁定了。这方面有利于每用户一键的方法。

  • 如果您正在为多个独立实体提供服务(例如为多个客户端提供服务的顾问),请考虑为每个客户端使用单独的 SSH 密钥。当关系结束时,客户可能会要求交出所有密码和 SSH 密钥,这并非闻所未闻。有时,解释为什么这不是一个好主意是可行的,但如果客户得到类似法院命令的东西,你可能会遇到问题。

  • 如果您的 SSH 私钥被泄露,您可能必须在许多系统上更改它。您是否还记得在过去十年中您使用该 SSH 密钥设置的每一个系统?你还记得从 Github 中删除你泄露的 SSH 密钥吗?或者从办公室某个壁橱里的路由器上,你可以远程管理几个状态?那些因为不再为特定客户工作而无法再接触的系统呢?

最后,归结为了解这两种方法的含义,并根据您的具体情况来平衡它们。