我需要设置一个类似于GitHub的解决scheme,在这里用户可以SSH到他们的git仓库。
这应该扩展到成千上万的用户,所以我的想法是使用分布式文件系统(因此每个节点都可以访问整个数据)和一个复制数据库来控制用户(所以再次 – 每个节点都可以访问整个用户列表)。
使用正常的authorized_keys文件是不可能的,因为用户没有绑定到特定的节点,所以我正在寻找一种方法来从数据库中读取列表( https://serverfault.com/a/443230/125948 )。
AuthorizedKeysCommand命令的问题是它只传递用户名(这是我的情况 – 对所有用户都是git ),所以基本上我必须做一个SELECT pub_key FROM user并且总是返回每个连接的SELECT pub_key FROM user列表。
这显然不是适当的解决scheme,所以我正在寻找另一种方式进行身份validation。 基本上我的问题是: GitHub是怎么做到的?
好的,find答案: https : //github.com/blog/530-how-we-made-github-fast
他们实际上修补OpenSSH来执行对MySQL服务器的查询: https : //github.com/norbauer/openssh-for-git
我认为他们有一个tcp代理嗅探名为proxymachine的数据包