确定哪个密钥已成功用于使用AuthorizedKeyCommands进行身份validation

从OpenSSH 6.2开始 ,使用AuthorizedKeysCommand可以使用基于密钥对的身份validation的外部程序。

根据sshd_config 手册页 ,该程序应该返回zero或更多行的authorized_keys输出。

假设configuration的程序返回多个键,是否有一种方法(比如ForceCommand下游)来确定使用哪个返回的键进行身份validation?

例如,如果每个密钥都有一个单独的用户,则这种方法效果很好。 然而,如果你正在共享一个用户(即'git')并且你想使用守护进程的ForceCommand (在sshd_config中configuration),那么你将失去使用哪个外部标识的用户和哪个密钥用于authentication的上下文。

Gitlab(和Gitosis)在共享一个'git'用户的地方做了类似的事情,但是维护了authorized_keys文件来把一个key_id命令行参数和他们的command=选项联系起来 ,允许他们在外部确定权限。 这似乎是他们如何链接密钥authentication与强制命令。

这个解决scheme在较小规模上效果很好,但似乎是一个噩梦,扩展到Github所拥有的数百万用户。

大规模,高可用性的SSH安装是否运行他们自己的OpenSSH版本? 我没有看到连接AuthorizedKeysCommandForceCommand的方法,而没有在OpenSSH设置中维护(如动物)文件。

在此先感谢您的帮助!

sshd_config中的AuthorizedKeysCommand描述

应该在标准输出上产生零或多行authorized_keys输出

这意味着你可以生成一个command=选项完整w /命令行参数(或任何其他有效的authorized_key选项)。

例如,dynamic生成的行可能是这样的:

no-port-forwarding,no-agent-forwarding,no-X11-forwarding,command="/path/to/program arg1 arg2 arg3'" ssh-rsa bigHugeLongLongKey alias

感谢@ kasperd的方向!