使用来自数据库的公钥的 OpenSSH

Fio*_*onn 15 ssh database public-key

是否可以从数据库而不是 authorized_keys 文件中获取公钥?

我想使用这样的设置来管理对多个用户的 git 存储库等内容的 ssh 访问,而无需在每次更改或添加公钥时重新创建 authorized_keys 文件。

Bo *_*nes 16

我在尝试自己回答时发现了这个问题。经过一些搜索和实验,我找到了其他一些选择。我将跳过有关分发密钥的部分作为替代方案,因为 Matt Simmons 涵盖了这一点。此外,我知道有时这还不够好。例如,如果您是 GitHub 并且必须为单个用户存储数百万个公钥,那么持续更新 SSH 授权密钥文件并保持它们在可能的数十到数百个边缘盒之间保持同步是不可行或不可取的。

所以,

  1. 首先,RedHat(和变体)有一个支持 OpenSSH 的补丁,它添加了AuthorizedKeysCommandAuthorizedKeysCommandRunAs选项。该补丁已在 openssh 6.2 中上游合并。引用手册页

    授权密钥命令

    指定用于查找用户公钥的程序。该程序将使用其第一个参数被授权的用户名调用,并且应该在标准输出 AuthorizedKeys 行上生成(请参阅 sshd(8) 中的 AUTHORIZED_KEYS)。默认情况下(或设置为空字符串时)没有 AuthorizedKeysCommand 运行。如果 AuthorizedKeysCommand 未成功授权用户,则授权将传递给 AuthorizedKeysFile。请注意,此选项仅在启用 PubkeyAuthentication 时有效。

    授权密钥命令运行方式

    指定在其帐户下运行 AuthorizedKeysCommand 的用户。空字符串(默认值)表示使用了被授权的用户。

    在我今晚的实验中,我发现开箱即用,由于默认的 SELinux 策略,这不起作用。您可以通过使用setenforce 0. 由于转向 SELinux 可能是一个主意,因此您可以生成正确的策略。就我而言,这就像尝试使用AuthorizedKeysCommand设置的选项登录/etc/ssh/sshd_config然后使用audit2allow -a -M local && semodule -i local.pp. 这基本上是查看审计日志并找到被阻止的事情并为它们生成异常。如果您可能有其他可能被列入白名单的内容,您可能应该了解更多信息audit2allow以确保您获得正确的新政策。

  2. 还有其他各种(可能较少测试和信任的)补丁可以添加类似的功能。例如,openssh-script-auth。您还可以找到 RedHat 使用的补丁并直接应用它。谷歌搜索的快速回合揭示https://launchpadlibrarian.net/89063205/openssh-5.3p1-authorized-keys-command.patchhttps://launchpadlibrarian.net/105938151/openssh-authorized-keys-command.patch这是基于 RH 版本,但已针对较新版本的 OpenSSH 进行了更新。

  3. 修补 OpenSSH 以直接从某些商店执行密钥查找(例如GitHub和 CodeBaseHQ 等)。据我所知,GitHub 尚未开源此补丁,但我知道过去我遇到过 MySQL 和 PostgreSQL 密钥查找版本。刚才我试图再次找到它们,但运气不佳。

  4. 还有一些基于 FUSE 的选项。例如,LPKFuse允许您通过将AuthorizedKeysFile位置更改为 LPKFuse 文件系统上的位置来提供来自 LDAP的公钥。LPKFuse FS 创建虚拟文件,其内容由来自目录服务器的字段支持。


总而言之,我认为选项 #1 是迄今为止最好的,因为它得到了 RedHat 的官方支持。此外,它允许您以您想要的任何语言在该脚本中放置您喜欢的任何逻辑(包括与数据库对话)。