SSH私钥丢失时的安全性

用户A有两个SSH私钥,随着时间的推移,他在一些服务器上使用了这个公钥,他丢失了一个私钥,创build了一个新的私钥对。

用户A如何告诉我(系统pipe理员),他丢失了密钥,以及如何pipe理他所访问的所有服务器(我没有用户A有权访问的所有服务器的列表)。 换句话说,我该如何回忆与这个私钥相关的公钥。

在基于LDAP的身份validation中,所有服务器都将与单个服务器存储库进行通信以进行身份​​validation,如果我删除了访问或修改了服务器上的密码,则当用户A丢失其密码时,所有使用此LDAP进行身份validation的系统都将受到保护。

你使用的是什么版本的sshd? OpenSSH 5.4显然有一个关键的撤销选项:

* Add the ability to revoke keys in sshd(8) and ssh(1). User keys may be revoked using a new sshd_config(5) option "RevokedKeys". Host keys are revoked through known_hosts (details in the sshd(8) man page). Revoked keys cannot be used for user or host authentication and will trigger a warning if used. 

如果您使用的是早期版本,则可能必须运行所有服务器上的所有可能的authorized_keys文件才能查找并删除可疑公钥。 这将包括User-A可能进入的任何帐户,包括root。 这假定你没有使用集中的authoried_keypipe理。

在OpenSSH和Putty中,您都可以从私钥重新生成公钥,但是不能反过来。

使用ssh-keygen -y -f文件名

在PuttyGen中,导入密钥,它会显示你的公钥。

如果这是一个用户密钥(就像它出现的那样),那么它将位于用户有权访问的用户标识的authorized_keys文件中。 您将需要search主目录的.ssh子目录。 (如果已经自动安装主目录,则只需要在一台服务器上search目录;否则,您需要search所有可能访问的服务器。)

问题将是find旧密钥的第一个副本。 常用系统上的用户主目录将是一个很好的起点。 一旦你有了密钥,你就可以在其他系统和用户标识符上进行grep了。 search键值而不是注释将更有可能find所有的键。

我该如何回忆与此私钥相关联的公钥。

虽然撤消SSH密钥当然不是一个坏主意,但是更好的(或更可扩展的)解决scheme是实现MFA(多因素身份validation,又称双因素身份validation)。 这具有贬低密钥的效果,因为除非满足(1)附加因素,否则用户不能login。

像Google Authenticator和Oath一样存在一些开源解决scheme。 然后是像Duo这样的混合开源/商业解决scheme。 使用Duo,您甚至可以loginlogin并推送通知。

对于100%运行的示例实现,请将此堡垒作为Docker容器执行: https : //github.com/cloudposse/bastion

一个可能的短期修复这种情况是使用一些configurationpipe理工具(在这里可能是个不错的select)。

您可以特别使用authorized_key模块( https://docs.ansible.com/ansible/authorized_key_module.html )从给定用户的authorized_key文件中删除一个(或多个)特定公钥指纹。

一个例子是缺乏您的需求,但这样的事情可以工作:

 - name: Set authorized key took from url authorized_key: user: charlie state: absent key: https://github.com/charlie.keys 

你也可以(至less可以)运行一个命令,通过查询/ etc / passwd来创build一个系统上所有用户的列表。

您也可以创build一个全新的白名单,并删除其他所有内容,但在您的情况下可能不太实际。

无能的文档给出了一个如何工作的粗略例子:

 - name: Set authorized key, removing all the authorized key already set authorized_key: user: root key: '{{ item }}' state: present exclusive: True with_file: - public_keys/doe-jane 

从长远来看,你可能会想考虑一下 – 我发现瞬移是相当不错的。