在多台计算机/服务之间共享私钥文件可以吗?


110

因此,我们都知道如何通过SSH等使用公钥/私钥。但是,使用/重用它们的最佳方法是什么?我应该将它们永远保存在安全的地方吗?我的意思是,我需要一对密钥才能访问GitHub。我从头开始创建了一对,并用了一段时间来访问GitHub。然后,我格式化了硬盘并丢失了那对。没什么大不了的,我创建了一个新对,并配置了GitHub以使用我的新对。还是我不想失去的东西?

我还需要一对公钥/私钥来访问我们的公司系统。我们的管理员问我我的公钥,我生成了一对新公钥并交给了他。通常,创建一个新的对以访问不同的系统会更好,还是拥有一对并重用它来访问不同的系统会更好?同样,创建两个不同的对并使用一个在家中访问我们公司的系统,另一对从下班来访问我们的系统是否更好,还是只拥有一对并在两个地方都使用它更好?


这不是您问题的直接答案,但是建议您也为每个键设置密码短语。理想情况下,为每个密钥使用单独的密码短语(使用密码管理器)。原因如下:如果私钥遭到破坏(笔记本电脑被盗,计算机被黑客入侵),则您需要一段时间才能对密钥进行暴力破解,并且可以在所有拥有密钥的计算机上替换公钥。 ,在攻击者可以之前。资料来源:help.ubuntu.com/community/SSH/OpenSSH/…–
Xandor Schiefer

Answers:


86

每个来源绝对应该有单独的私钥。基本上,这意味着每个私钥通常应该有一个副本(不计算备份)。在紧密关联的机器基本上可以让您访问另一机器的情况下(例如,如果它们位于彼此的机器中),可以使用与密切相关的机器相同的私钥shosts.equiv。不要在不同领域(例如家庭和工作场所)的计算机上使用相同的私钥,不要在两个用户之间共享私钥,也不要在笔记本电脑和任何其他计算机之间共享私钥。

在大多数情况下,我看不出针对不同目的地具有不同私钥的意义。如果私钥遭到破坏,存储在同一目录中的所有其他私钥也肯定也会受到破坏,因此将增加复杂性,而没有安全性的好处。

如果遵循这些原则,则每个密钥对都将标识一对(计算机,用户)对,这将简化授权管理。

我可以想到每个来源单个私钥的一般规则的两个例外:

  • 如果您有一个无密码的密钥,该密钥仅允许访问特定计算机上的特定命令(例如,自动备份或通知机制),则该密钥必须与常规Shell访问密钥不同。
  • 如果某些计算机是断续连接的,则可能会有一个旧的私钥和一个新的私钥,直到您完成完成新密钥的部署为止。

5
这就是我一直使用我的密钥对的方式。我不明白为什么GitHub提倡在其设置说明中生成新的密钥对。我忽略了这一点,并使用了我的标准密钥对。我认为他们是保守的。
toolbear74

好的,所以您说“不要在不同领域的计算机上使用相同的私钥”,但是如果DNS根据您的位置将给定的主机名解析为任一计算机,该怎么办?如果不共享私钥,当我尝试ssh或rsync到该主机名时,我会收到警告或失败,因为ssh混淆了同一主机名具有两个单独的密钥。
迈克尔

@Michael我不了解您所描述的场景中的用户密钥可能存在什么问题,这就是该线程所要解决的问题。SSH会对主机密钥感到困惑,但是作为用户,您看到的是主机的公共密钥,而不是主机的私钥,并且共享主机的私钥很危险–我只建议主机完全相同(冗余)万一其中一个失败),甚至可能到那时也不会。
吉尔斯

喔好吧。似乎两者之间并没有很多明显的区别,只是假设您知道正在谈论哪个。
迈克尔

1
@JSBach每个领域具有单独的密钥可以使您定义更细的权限(存储在低安全性领域A的密钥允许在A的机器之间使用,但是登录到B则需要更强的身份验证因子)并允许您撤销它们分别(领域A受到威胁,但我仍然可以从B登录到C)。SSO是您登录到最高安全性的系统,然后可以在其他地方登录的情况。我不知道他们看到每个用户拥有多个密钥会有什么风险。这将是信息安全性的主题。
吉尔斯

4

我不知道什么是最好的方法,但是我可以告诉我哪种方法。

作为系统管理员,我使用其他密钥以root用户身份访问每个服务器/服务。这样,如果密钥丢失或被盗用,我将风险限制在一台服务器上,而无需使用全新的密钥更新我的所有服务。

说到用户,我为每个用户使用了不同的密钥。使用该密钥,用户可以以非特权用户身份访问他需要的服务。这样,我可以轻松地向每个用户授予或撤消对单个服务的访问权限。万一用户松开密钥,我可以将其从所有服务中删除,并限制未经授权访问的风险。


+1我将与老板讨论新的密钥使用政策;-)每个服务器/服务听起来比每个网络都更加安全
Diskilla 2010年

1

我相信只要在上面加了密码,就可以在任何地方使用私钥,这表示如果您想与几台机器共享私钥,例如笔记本电脑1、2,台式机1、2应该很好。

从我的经验来看,我的主要计算机是台式机,我使用其强大的处理器来完成大部分工作,但是有时我需要在移动设备上使用笔记本电脑,在数据中心中进行故障排除等,因此,我仍然可以登录任何主机我拥有我的公钥的位置


1
在此处阅读最佳答案。你这样做是错的。不是您不能那样做,但您不应该那样做。
PhilT

2
看不清楚为什么所有的反对票。例如,大学网络通常具有一个联网的主目录,因此,即使在您使用的笔记本电脑上,用户也可以在任何地方使用相同的私钥。只要您不通过Internet复制未加密的内容,那么我认为如果您了解这种风险就可以了。这样也更方便,不必因为登录到另一台计算机而将公共密钥添加到2,000个不同的位置。
Asfand Qazi

推荐,因为您不应该失去这个答案的代表。这是个人喜好,显然每个服务和机器使用单独的密钥最终可以为您提供更多控制权,但是有时这只是浪费时间,具体取决于您的用例。
丹尼尔·德赫斯特

0

在我公司,我们使用这些特定于用户的密钥。这意味着第二种情况。用户拥有自己的密钥,此密钥用于他用来连接公司系统的每台机器。我的观点是对一个系统使用一个密钥。这意味着您需要在连接到特定网络的每台计算机上使用此密钥。对于您的情况,这将是GitHub的一键和公司系统的一键。因此,如果您的管理员再次询问您,我会给他与上次相同的密钥。不是新的。但是,我不知道这些密钥是否有通用的使用策略,从那时起我就做错了。那肯定是可能的;-)


0

您生成的公共密钥适用于所有人。它将允许他们a)检查真实性b)为您加密

私钥是私有的。只给你。这是您应该在安全的地方备份的密钥。例如,如果将其保存在USB记忆棒上,也可以使用安全密码对其进行加密。

公钥是您对他人的身份。因此没有问题/最好为所有事物使用一个密钥对,至少在您不想使用明确的新身份的地方,这样其他人就不会知道是您。


3
谢谢,但是您的回答基本上与我的问题无关。请参阅@Diskilla的答案。
Behrang
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.