从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版本? 我没有看到连接AuthorizedKeysCommand和ForceCommand的方法,而没有在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的方向!