管理ssh密钥的最佳系统?[关闭]


42

我有几台客户端计算机(例如,笔记本电脑,台式机等),并且连接到我管理的多台服务器计算机,并且都通过SSH登录到它们。我可以想象有几种管理ssh密钥的方案会很有意义,并且我对其他人的工作很好奇。

选项1:一个全球公钥/私钥对。

我将生成一个公用/专用密钥对,并将专用密钥放在每台客户端计算机上,并将公用密钥放在每台服务器计算机上。

选项2:每台服务器计算机一个密钥对。

我将在每台服务器计算机上生成一个密钥对,并将每个私钥放在客户端计算机上。

选项3:每台客户端计算机一个密钥对。

每台客户端计算机将具有唯一的私钥,而每台服务器计算机将具有我要从其连接的每台客户端计算机的公钥。

选项4:每对客户端/服务器对一个密钥对

完全落水?

其中哪一个最好?还有其他选择吗?您使用什么标准来评估正确的配置?

Answers:


33

我使用选项3:每台客户端计算机一个密钥对,这对我来说最有意义。原因如下:

  • 如果客户端受到攻击,则需要从服务器中删除该密钥(只有该密钥)。
  • 它具有足够的灵活性来决定我可以从何处访问什么,而无需授予所有客户端对所有服务器的整体访问权限。
  • 很方便。ssh-add只有1个键,没有混乱。
  • 通过选项4易于设置和管理

选项4不错,但是工作太多。选择3可以使您98%的麻烦减少。


4
我看不到备选方案4的要点。它毫无用处。
niXar

26

我使用的解决方案比较复杂,但是用途广泛,因为我想在用于我的家庭网络服务器,办公服务器,咨询客户端网络服务器和我使用的其他各种系统的SSH身份密钥中保持一定的分离。

既然如此,我几乎只能在Linux工作站上工作,所以我有一个使用LUKS加密设置的USB密钥,并且我的X11窗口管理器和HAL守护程序一起检测了LUKS加密的驱动器,并在插入并尝试进行解密时提示输入解密密码。被安装。通过以这种方式将其存储在加密驱动器上,我从未将SSH密钥存储在任何工作站上。

然后,我的~/.ssh/config文件中具有以下配置:

Host *
    Protocol 2
    IdentityFile %d/.ssh/keys.d/id_rsa.%l
    IdentityFile %d/.ssh/keys.d/id_dsa.%l
    IdentityFile %d/.ssh/keys.d/%u@%l

%d通过OpenSSH转换为用户的主目录,并在〜/ .ssh目录中创建了keys.d作为正确安装后的加密USB驱动器上目录路径的符号链接。

%L表达被转换为本地客户机的主机名和%U将被转换为本地客户端的用户名。

此配置的作用是允许SSH使用3种不同的表达式查找密钥。例如,如果我的本地客户端的用户名是,jdoe而我的本地客户端计算机的名称是,examplehost则它将按以下顺序查找,直到找到既存在又被远程服务器接受的密钥。

/home/jdoe/.ssh/keys.d/id_rsa.examplehost
/home/jdoe/.ssh/keys.d/id_dsa.examplehost
/home/jdoe/.ssh/keys.d/jdoe@examplehost

您甚至可以使用%r表达式来查找特定于远程服务器用户名的密钥,或者使用%h来查找远程服务器主机名,就像使用%u%l一样。

更新:现在,我实际上利用具有ssh-agent兼容性的GnuPG gpg-agent来读取和使用OpenPGP v2智能卡上的身份验证密钥。


哇,很好的解决方案,谢谢!我喜欢〜/ .ssh / config中的通用配置
slacy

事实证明,将工作,个人和咨询客户端网络服务器分开存放是非常方便的……我不想在它们之间混合使用身份验证,但也希望它对我来说很容易。
杰里米·布斯

惊人!我真的很喜欢这个
balu

我假设您为不同的客户端计算机使用了不同的USB密钥。否则,如果所有密钥都存储在同一位置,那么在单独的密钥中有什么意义呢?万一发生违规,您将需要全部撤销。除非(并且可能)我错过了某些东西,否则这似乎会使事情变得复杂。
HalilÖzgür13年

@HalilÖzgür,是的,我正在咨询,并不总是希望使用相同的密钥。由于USB密钥已加密并且没有连接到任何计算机,除非我需要它进行连接,所以无需担心服务器被破坏,解密驱动器文件系统的密码短语足够长,足以使吊销密钥足够简单。
杰里米·布斯

6

我将消除您的两个选项1(我怀疑其中一个应该为选项2 ;-),因为私钥是敏感数据,并且将它们尽可能地少保留是有意义的。我个人绝不会将私钥从一台计算机复制到另一台计算机(甚至从同一台计算机上的一个文件复制到另一台文件),除非是进行备份。尽管与大多数加密密钥不同,但如果SSH密钥丢失了,那就不是世界末日了(只要创建一个新密钥,就不会丢失任何数据)。


是的,重命名为适当的“选项2”,我喜欢“从不复制私钥”的规则。这是一个好规则。
懒惰


1

选项3。

这也使您可以控制客户端可以访问哪些服务器。例如,如果客户端X需要访问服务器A和B,但需要访问服务器C和D,则可以将其公钥仅复制到那些主机。

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.