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

更新:

所有主机都具有一个ssh密钥:

~/.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.


评论

相关:“重用私钥/公钥”

#1 楼

私钥对应于给定用户的单个“身份”,无论这对您意味着什么。如果对您来说,“身份”是一个人,或者是一台机器上的一个人,或者也许是一台机器上运行的应用程序的单个实例。粒度级别由您决定。
就安全性而言,通过使用密钥登录计算机,您不会以任何方式破坏密钥[1](就像使用密码一样) ),因此从身份验证/安全性的角度来看,为不同的目的地使用单独的密钥不会使您更加安全。
尽管为多台计算机授权了相同的密钥,但确实证明了同一密钥持有者可以访问两台计算机从法医的角度来看。通常这不是问题,但是值得指出。
此外,单个密​​钥被授权的位置越多,该密钥就越有价值。如果该密钥被盗用,则会有更多目标受到威胁。
此外,私钥存储的位置越多(例如,您的工作计算机,笔记本电脑和备份存储空间),那里的位置就越多是为了让攻击者获取副本。因此,这也值得考虑。
关于如何运行安全性的通用指南:没有。您添加的额外安全性越高,您放弃的便利就越大。我可以明确地提出一个建议:保持您的私钥加密。

[1]:在不同的安全上下文中授权相同的SSH密钥存在一种重要的方式,这与代理转发有关。安全使用代理转发的约束和警告超出了此问题的范围。

评论


谢谢你这么丰富的答案!您知道有关私钥加密的好文章吗?这是否足够[martin.kleppmann.com/2013/05/24/…?

–静态
13年8月5日在13:43

那样做;类似的信息在这里。使用ssh-keygen -p重新加密现有密钥。 (文档)

– tylerl
13年8月5日在16:58

“因此,从身份验证/安全的角度来看,为单独的目的地使用单独的密钥不会使您更加安全”,并不是说“为网站登录使用单独的密码并不比为每个网站使用不同的密码更安全”。 “?

–DBedrenko
16年6月7日在7:53

PastaFeline,我认为关键区别(请参阅我在那做的事?)是SSH的秘密位(私钥)永远不会离开客户端计算机,而秘密位(密码)或它们的哈希会传输到用于密码验证的远程计算机。如果用户的密码很弱,则即使有哈希值,也很容易遭受暴力破解(请参见Rainbow Tables)。

–斯科特
16年6月7日在19:48

@SpaghettiCat不,我的意思是跨多个目标使用单个ssh密钥不会为任何一个目标提供足够的信息来模拟您到其他任何目标。

– tylerl
16年6月7日在19:55

#2 楼

我认为可以从两个角度来考虑这个问题:安全性和便利性。

当我们创建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):


尽管有一个明确的提示要求输入密码,但是某些(或许多)人仍然更加关注方括号中的信息:(为空

,结合是否使用多个SSH密钥对以及是否输入其他密码,我们至少有四种方法。并假设所有密钥对和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)


如果没有密码,如果我们的系统被某人入侵,则断路器可以获取我们所有的私钥和配置,远程服务器的身份验证。因此,在这种情况下,一个密钥对和多个密钥对是相同的。最安全的方法是对不同的ssh密钥对使用不同的passwds。

那就不要考虑方便性了。

但是更多的密钥对和更多的passwds也会使我们的生活较不方便,下表给出了有关安全性的简单排名(数字越大表示越安全):

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)


因此,在一般情况下,如果我们必须进行交易同时兼顾安全性和便利性,我们可以将两个分数相乘,也许一个SSH密钥对(与passwd一起)是不错的选择。

评论


这应该是公认的答案,因为它可以非常清楚地明确回答该问题。

– jdk1.0
19年7月17日在12:58

#3 楼

您只需要一个密钥,因为该密钥属于您的用户。

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

您的私钥保持私密,您可以使用此单个密​​钥,并使用它对多个主机进行身份验证。

评论


错了使用相同的密钥登录2个服务器/帐户将显示两个用户可能是同一个人。

– Navin
15年11月10日在20:24

@Navin怎么了?

–阿斯范·卡兹
17年5月3日,9:01

@AsfandYarQazi如果在不同的站点上使用相同的密钥,则可以轻松地使自己匿名。继续搜索Google“我们基于元数据杀人”。

– Navin
17年5月3日在10:29

我懂了。您知道通过使用同一帐户发布两个评论来取消匿名吗?我希望他们不会抓到你。

–阿斯范·卡兹
17年5月10日在13:09



没了@Navin == Asfand Qazi !!

–蒂莫西·L·J·斯图尔特
18年7月29日在1:54

#4 楼

根据经验,我同意其他答案-每个用户一个键通常是最实用的方法。但是,这不是一种“一刀切”的方法。

这里有一些其他注意事项。


如果您正在使用SSH代理程序会出现超过三个或四个密钥的问题,因为在连接到服务器时,SSH客户端可能会依次尝试另一个存储的密钥。这可能会导致服务器端多次登录失败,并且实际上您可能会发现您的帐户已被锁定,而SSH甚至没有尝试使用正确的密钥。这方面偏向于每用户一键式方法。
如果您要服务多个独立实体(例如为多个客户端提供服务的顾问),请为每个客户端考虑一个单独的SSH密钥。结束关系后,客户端可能会要求移交所有密码和SSH密钥,这并非鲜为人知。有时,解释为什么这样做不是一个好主意,但是如果客户端收到法院命令之类的东西,您可能会遇到问题。
如果您的SSH私钥受到破坏,则可能必须在许多系统上进行更改。您甚至还记得过去十年中使用该SSH密钥建立的每个系统吗?您是否还记得要从Github删除受到破坏的SSH密钥?还是从办公室里某个壁橱中的路由器上得知几个远程管理您?那么,由于您不再为该特定客户端工作而无法接触的系统又如何呢?

最后,归结为理解这两种方法的含义,并将它们与您的情况特别关注。

评论


方案1:无法使用SSH配置文件在每个站点上配置密钥吗?

– jdk1.0
19年7月17日在13:10

@ jdk1.0这是我没想到的好主意。我认为它也可能与Putty一起使用。

–凯文·基恩(Kevin Keane)
19年8月5日在20:29

#5 楼


最佳做法是:每台主机和用户分别使用ssh密钥VS所有主机使用一个ssh密钥?


我不知道我是否正确回答了您的问题你是说“钥匙”?您是指非对称加密吗?

使用非对称加密时,您具有私钥和公钥对。每个用户的公钥都存储在ssh服务器(主机)上。这允许对用户进行身份验证,因为对于每个公共密钥,应该只有一个私有密钥。



对所有主机都拥有一个ssh键是什么意思?

评论


我已经看到了该图像,但是从步骤“配置了“公钥”的远程SSH服务器”到“已匹配私钥和公钥对?”的过渡的细节让我很感兴趣。

–静态
13年8月4日在23:20

如果您只是对从“配置了“公钥”的远程SSH服务器”到“匹配的私钥和公钥对”的转换感兴趣?然后看看这个

–谜
13年8月4日在23:30

#6 楼

单独密钥的主要好处是在最坏的情况下会发生什么:有人获得了您的私有密钥。


所有主机上都有相同的密钥:坏人现在可以访问所有内容。 br />每台主机上的密钥不同:坏人只能访问一件事。

那么-最安全吗?每个主机的唯一键。

评论


如果攻击者可以访问问题中的文件夹,则他不仅可以访问您的私钥,而且还可以使用用户名列表并托管这些密钥,

–德国Rumm
16年6月23日在0:21

是;人们实际上必须提高安全性度量的效率。如果您增加了使用负担,那么您还可以增加被利​​用的可能性。

–蒂姆·哈珀(Tim Harper)
16-09-23在21:48

在典型的计算机上,例如OSX计算机,密钥通常位于〜/ .ssh /中。如果攻击者可以访问一个密钥,则可能意味着它们可以访问所有密钥。从这种意义上说,在一台机器上拥有多个密钥没有任何好处,但是,为每台客户端计算机都拥有单独的密钥(都在一个特定的端点上注册)可能是审慎的做法(例如GitHub)?还是我错过了什么?

–克里斯
17年1月12日在13:23

@克里斯。一台机器上有多个密钥是有好处的,IFF密钥受密码短语保护并且密码短语不同。如果攻击者可以访问您的私钥,他仍将必须为每个私钥破解密码。这完全取决于威胁级别和您愿意付出的努力。另请参阅superuser.com/a/121348/478867

–NZD
17年6月12日23:57



@NZD不是IFF。即使密码短语相同也仍然有好处。例如,您的笔记本电脑由于其中一个密钥被解密而被盗。攻击者只有一个密钥,但是密码短语相同的事实并不能帮助他获得其他密钥的访问权限。

–乔恩·本特利
19年1月22日在20:41



#7 楼

这可能有点晚了,但是我认为值得一提:
从安全性和便利性的角度来看,在管理人类用户时,希望每个用户拥有一个密钥。

当您需要撤消对单个用户的访问权限时,这些优点就来了。

假设您正在为所有用户使用一个密钥,并且没有密码(或使用相同的密码)。
您可以禁用服务器中的用户(“帐户”),但是人类的全部需求就是用户和获得访问权限的钥匙。他/她已经有密钥,因为它是文件,您无法控制,然后他只需要一个用户名(也许用户(帐户)是使用标准算法(例如,名字的第一个字母+姓氏)制成)即可获取以其他用户身份访问。然后,出于安全原因,您将不得不创建一个新的密钥对(并将其交付给用户)并禁用旧的密钥对。

如果每个密钥有一个密钥,则要简单得多。用户,因为您只是禁用用户(如果需要,还可以禁用密钥)。

在管理处理敏感数据的系统或服务器时,用户池是可变的(几乎可以肯定的是,旋转速度不同),这在安全性和便利性方面成为一种很好的做法。

评论


这很重要,内部威胁是对组织的更大威胁。

–蒂莫西·L·J·斯图尔特
18年7月29日在1:59

我相信您误解了这个问题。 OP并未将每个用户的一把钥匙与所有用户的一把钥匙进行比较。他正在比较每个用户一个密钥与每个主机每个用户多个密钥。

–乔恩·本特利
19年1月22日在20:38

我相信您是对的,尽管我的回答是在更新之前进行的。就是说,OP的问题只是治理问题,而不是最佳实践问题。

–曼努埃尔·埃雷拉(Manuel Herrera)
19年1月22日在21:09

#8 楼

自从提出问题以来,情况发生了很大变化。如今,有两点支持所有主机都使用一个SSH密钥。


硬件密钥变得越来越流行。至少可以说最受欢迎的品牌Yubikey仅支持单个SSH密钥。
如果您使用LDAP服务器进行身份验证,则可以添加LDAP schama来将SSH公钥存储在LDAP中,而不必添加它每个主机。其他一些IDM解决方案也可能提供类似的功能。

当然,这不会使前面的答案中提到的其他注意事项无效。