这是情况。
我有5000个服务器分成100个“组”。
每个“组”有1个SSH密钥对,这将允许访问组中的任何服务器。 我有60个用户(一些人,一些没有)需要访问所有5000个服务器。 用户都在不同的计算机上,一些PC(putty)一些Linux(ssh)。
手动:向“组”添加新服务器似乎很简单。 添加/更新用户将是一场噩梦。 添加/更新一个新的组将是一场噩梦。 将组密钥同步到用户站将是一场噩梦。
ssh-agent / pageant适用于单个工作站上的单个用户,但似乎不具备可扩展性。
有软件可以处理这个pipe理? 某种代理也许? 还是基于自动服务器的密钥检索协议
编辑
我很欣赏迄今为止的帮助,但我认为我不清楚或不了解这些build议。
更多信息:每台服务器都是远程系统,无法访问Internet,连接速度一般较慢。 每个服务器在其authorized_keys文件中只有一个条目。 我不想要或不需要个人用户密钥。 我只想让很多不同的人为每个组使用相同的密钥。 现在我们正在使用密码authentication,并在一张纸上保存每个组的密码列表。 这对我们的团队有用。 但是如果我们切换到基于密钥的身份validation,它将不起作用。
这些build议还是有意义的吗? 如果是这样,你可以更具体的实施细节。
除了把它自己的密钥放到服务器上,我需要它来使用我提供的密钥。
我有几个人问这个问题。 我添加了一种方法来在最新版本中指定密钥对。
https://github.com/skavanagh/KeyBox/releases
https://github.com/skavanagh/KeyBox#supplying-a-custom-ssh-key-pair
如果您有任何问题,请告诉我。 谢谢!
你可以看看使用公钥http://code.google.com/p/openssh-lpk/的 LDAP
如果一个用户受到威胁,这将使得重新发布密钥变得更容易。 每个用户的私钥可以由该用户pipe理,或者保存到只有他们有权访问的存储器(例如主目录)。
查看Userify ,pipe理用户帐户,SSH密钥和sudoangular色,并且不需要一个可以closures的中央目录服务器(将您的所有实例locking在那里)。
使用AWS的用户数据(在实例启动的“高级”选项卡下)进行部署非常简单,或者在用户自定义组的UserData脚本中,或者手动启动实例时,都可以很容易地进行部署,这是非常棒的,login(或者你可以将一行代码粘贴到你的服务器控制台中,但是这并不是那么有趣)
它支持Chef,Puppet,Ansible,CloudFormation / CloudInit和TerraForm进行部署,每个用户(developer / admin / etc)都有自己的weblogin来更新多个密钥(只需粘贴)。 体面的界面,相当无痛。
似乎Keyholder将会非常适合您的需求。
从维基页面 :
密钥持有者是一组脚本,它允许一组用户使用SSH密钥,而不用与组中的成员共享私钥。 这是通过运行一个locking的ssh-agent实例并在其前面运行ssh-agent-proxy来完成的。
一旦你运行并configuration了ssh-agent-proxy,用户通过设置SSH_AUTH_SOCK指向代理的套接字进行authentication,然后ssh-agent-proxy只允许用户使用他们有权使用的密钥进行authentication,组员资格。
configuration如下所示:
--- group-name: ["ssh:key:fingerprint"]
密钥分开存储,只能由root访问。
有权访问root的用户必须在重新启动服务器之后“武装”一次keyholder服务,那么具有相应组成员资格的任何人都可以使用存储在密钥持有者ssh_agent中的密钥。
自从我最初编写这个答案以来,密钥持有者已经从维基媒体傀儡存储库中提取出来,并给予适当的处理以成为一个独立的项目。 现在使用起来要容易得多,特别是对于debian用户来说,因为debian打包脚本和元数据包含在源代码库的一个单独的分支中。