因此,据我所知,如果您不生成新的密钥对,ssh 公钥就不会过期。有没有办法在一定时间内授予客户端访问权限?比如基于令牌的身份验证。所以基本上,我感兴趣的是,您可以制作一个“可过期的公钥”吗?
答案1
简短回答
是的,有两种常见机制:Kerberos 和短期 SSH 证书。(搜索“SSH 证书颁发机构”。)
长答案
你实际上并不需要一种新的身份验证方法,只要 SSH服务器软件允许强制执行常规密钥的某些过期方式。OpenSSH 有多种机制来实现此目的:
你可以取出钥匙从服务器端
authorized_keys
文件手动或使用 cronjob。如果密钥是访问服务器的唯一方式,或者您重新配置了 sshd 以将密钥存储在 root 拥有的位置(而不是 ~/.ssh/),则用户无法简单地将其添加回来。在较新的 OpenSSH 服务器版本中,您可以通过
expiry-time=
向 authorized_keys 条目添加选项来实现此自动化。(请参阅SSHD(8).)与上述相同,如果这是最后一个密钥或者authorized_keys文件位于用户不可写的地方,则会阻止用户简单地编辑设置。您可以生成密钥撤销列表使用 ssh-keygen。通过启用 /etc/ssh/sshd_config 选项,配置服务器以检查所有密钥。
RevokedKeys
用户无法绕过密钥撤销 - 它只是覆盖 authorized_keys 条目。你能实际上会生成一种内置了有效期的特殊密钥类型 - “证书”。目前这还需要客户端使用 OpenSSH,因为其他客户端尚未实现发送证书的支持。
-s
OpenSSH 证书的工作原理与 TLS X.509 证书非常相似:它们由“证书颁发机构”颁发,在本例中,证书颁发机构是服务器的所有者。请参阅ssh-keygen(1)– 您可以指定有效时间、允许的用户名等,OpenSSH 服务器将强制执行它们。与方法 #4 类似,存在 SSH 客户端和服务器(例如 PKIX-SSH),可让您使用实际的X.509 证书用于公钥认证,当然它们还强制执行嵌入在这些证书中的“到期时间”参数。
也就是说,SSH 中有基于令牌的身份验证机制:
Kerberos 5 是一种常用的基于“票证”的机制。(它实际上基于共享密钥。)您可以使用以下方式从身份验证服务器获取短期票证
kinit
- 默认有效期为 10 小时 - 并且可以使用“GSSAPI”身份验证方法将它们与 SSH 一起使用。Globus GSI 是另一种基于 GSSAPI 框架的机制(尽管由于后者开发人员的不当选择,它需要在其基础上打补丁的 OpenSSH 版本)。它比 Kerberos 少见得多,实际上只在学术“网格”环境中见过。
最后,我将 OpenSSH 公钥证书归入同一类别,因为如今许多大型网站确实将它们视为短期令牌 - 您会发现可以自动颁发为期一天的证书的软件,类似于 Kerberos 和 GSI。(示例:云Flare,Netflix。