我想使用这样的设置来管理对多个用户的git存储库等ssh访问,而无需在每次更改或添加公钥时重新创建authorized_keys文件.
解决方法
所以,
>首先,RedHat(和变体)有一个支持OpenSSH的补丁,它添加了AuthorizedKeysCommand和AuthorizedKeysCommandRunAs选项.该补丁已在openssh 6.2的上游合并.引用man page:
AuthorizedKeysCommand
Specifies a program to be used for lookup of the
user’s public keys. The program will be invoked with its first
argument the name of the user being authorized,and should produce on
standard output AuthorizedKeys lines (see AUTHORIZED_KEYS in sshd(8)).
By default (or when set to the empty string) there is no
AuthorizedKeysCommand run. If the AuthorizedKeysCommand does not
successfully authorize the user,authorization falls through to the
AuthorizedKeysFile. Note that this option has an effect only with
PubkeyAuthentication turned on.AuthorizedKeysCommandRunAs
Specifies the user under whose account the
AuthorizedKeysCommand is run. Empty string (the default value) means
the user being authorized is used.
在我今晚的实验中,我发现开箱即用,由于默认的SELinux策略,这不起作用.您可以通过使用setenforce 0关闭SELinux强制执行来解决这个问题.由于转换SELinux可能不是一个好主意,而是可以生成正确的策略.就我而言,这就像尝试使用/ etc / ssh / sshd_config中设置的AuthorizedKeysCommand选项登录然后使用audit2allow -a -M local&& semodule -i local.pp.这基本上可以查看审计日志,查找被阻止的内容并为它们生成例外.如果您可能在其中有其他可能被列入白名单的内容,您应该了解有关audit2allow的更多信息,以确保您正确地获得新策略.
>还有其他各种(可能不太经过测试和信任的)补丁来添加类似的功能.例如,有,openssh-script-auth.您还可以找到RedHat使用的补丁并直接应用它. Googling的快速回合揭示了https://launchpadlibrarian.net/89063205/openssh-5.3p1-authorized-keys-command.patch和https://launchpadlibrarian.net/105938151/openssh-authorized-keys-command.patch,这些版本基于RH版本,但已针对较新版本的OpenSSH进行了更新.
>修补OpenSSH直接从某个商店执行密钥查找(例如GitHub和CodeBaseHQ等已经完成).据我所知,GitHub没有开源这个补丁,但我知道在过去我遇到过MysqL和Postgresql密钥查找的版本.我刚刚试图再次找到它们,但没有太多运气.
>还有一些基于FUSE的选项.例如,有一个LPKFuse允许您通过将AuthorizedKeysFile位置更改为LPKFuse文件系统上的一个位置来从LDAP提供公钥. LPKFuse FS创建虚拟文件,其内容由目录服务器中的字段支持.
总而言之,我认为选项#1是最好的,因为RedHat正式支持它.此外,它允许您以任何所需的语言将您喜欢的任何逻辑放在该脚本中(包括与数据库交谈).