我想这是解决我与自己的内部辩论的方法。
在我的配置过程中,我希望为集群中的每台机器共享一个公共和私有ssh密钥(因为这些键位于负载均衡器后面,而且我不想得到键错配错误),内部抽搐告诉我这是错误的。正确的方法是为客户端生成一个私钥,并将公钥添加到authorized_key文件中?
我无法正确地推理为什么在集群中的所有节点之间共享公共密钥对是不好的。一个确实在脑海中浮现的事实是,它只需要一台机器就可以完成。我们希望使用选项一的用例是什么?还是完全不赞成。
对需求的描述:如果我们有Bob,想要连接到Alice的集群,我们希望bob能够连接到Alice集群中的每个Alice。
发布于 2015-05-19 17:21:49
要回答您的问题,可以在负载平衡池中的所有服务器上共享主机密钥。然后,对负载平衡的IP/DNS条目进行一次主机密钥验证,从那时起,它将登录到任何池成员中,而不需要再次询问。
在我更进一步之前,对于那些想知道你为什么要这么做的人来说。这可能与控制服务器(管理)无关。它可能是关于使用scp/sftp发送文件,然后可能在每个池成员上使用某种调度程序/作业应用程序。
这也不一定是为了平衡负载。例如,如果您想获得高可用性,您可能会对此设置感兴趣。
无论如何,让我们假设您已将myapp.mycompany.net注册为10.12.77.77,然后将循环转到8个服务器。您在所有8个服务器之间共享主机密钥,然后在ssh myapp.mycompany.net之间,它将要求您确认,然后设置您。现在,您可以对DNS条目执行scp/sftp/任何操作,并且它不会问您何时进入新的池成员。
希望这能有所帮助!
发布于 2015-05-04 16:30:19
我认为这不应该是个问题--使用一个密钥对访问多台服务器是非常好的,世界上大多数人都是这样工作的。
正如汤姆·利克提到的,重要的是要明白,钥匙的私密部分--必须保密--只存储在你的单机上,永远不会从机器中转移出去。因此,即使其中一台服务器被破坏(以另一种方式窃取您的私钥),也不可能使用此访问来获得对其他服务器的SSH访问(尽管攻击者可能使用了一个漏洞,该漏洞在所有其他服务器上都能正常工作,因为它们的配置相同)。
我必须指出,在我看来,使用“负载均衡器”访问SSH上的服务器似乎有些可疑:"Load Balancer“通常指IP级或TCP级访问控制,这样客户端连接到单个IP,每次都分配不同的后端。这不是连接到SSH的一种可接受的方式,因为当客户端试图验证主机密钥时,无论登录密钥如何(除非您使用相同的主机密钥(我认为这是一个糟糕的选择),仍然会出现主机不匹配的错误。一种可能的配置是,您将使用DNS循环配置将所有服务器定位为相同的名称,其中每次解析为不同的IP。在这样的设置中,客户端可以分别验证每个IP,您将不会收到错误。
发布于 2015-04-24 00:25:00
客户机和服务器密钥生活在不同的世界--客户机密钥由服务器验证,服务器密钥由客户端验证。您手头的问题是如何拥有多个服务器和一个客户端,以及服务器之间的密钥共享。您如何处理另一个世界(客户端密钥和authorized_keys文件)是无关紧要的;它对这个问题没有影响。
我想说的是,这个密钥共享的最大问题不是密钥被共享,而是您想共享密钥的原因。您希望共享密钥,因为您不知道要连接到哪个服务器。这就是问题所在:您正在通过一个负载均衡器执行SSH,该负载均衡器会将您发送到其中一个服务器,但无法控制您最终得到哪个服务器。这不是你想要的。您希望能够对所有服务器执行SSH,而不仅仅是随机选择的服务器。如果负载平衡SSH连接,则不可能有这种情况。
如果您希望(如我所相信的)能够单独控制所有集群机器,那么您必须有一种方法来具体地连接到它们中的任何一个,并且可能(可能)同时连接多个。这意味着使用它们的非共享特定IP地址,或者,正如@Iserni建议的那样,使用不同的端口(如果您必须“从外部”使用SSH,并且只有一个IP地址可用)。到那时,密钥共享就不那么重要了。出于其他原因,您可能仍然希望共享密钥(例如,从已配置的映像创建所有机器;或自动为客户端创建已填充的.ssh/known_hosts )。服务器之间的密钥共享意味着移动私钥,这在总体上不是一个很好的主意;但是集群中的机器可能很接近,人们可能认为(或者至少希望)它们可以在不被外界监视的情况下一起交谈。
您还可能希望研究从这个答案链接的工具。
https://security.stackexchange.com/questions/86753
复制相似问题