authorized_keys在扩展方面表现如何?

如果我使用像gitolite这样的工具来处理访问控制,authorized_keys在规模上能扩展到多大程度呢?也就是说,如果我有50000个用户,性能会如何(我猜应该不太好)。还有其他的选择吗? 更新: 我决定自己进行一些测试(本来应该一开始就这样做的)。我编写了一个简单的脚本来生成SSH密钥并将它们添加到一个authorized_keys文件中。我的电脑不是很快,所以我只生成了8061个密钥,然后将我的密钥添加到文件末尾,文件的大小最终为3.1MB。然后我添加了一个带有一个文件的git仓库,并运行了三次git clone命令。
With 8,061 keys (Mine is at the end of the file)
real    0m0.442s
real    0m0.447s
real    0m0.458s

With just a single key:
real    0m0.248s
real    0m0.264s
real    0m0.255s
表现比我想象的要好得多。对于可能更高效的大量密钥(50,000+)的任何替代方案,我仍然非常感兴趣。

你是期望在单个服务器上拥有50000个同时在线用户,还是总共有50000个用户但访问不规律? - Mxx
零星访问。我在询问SSH服务器的性能,每次登录都需要搜索一个包含50,000个密钥的authorized_keys文件。 - Jeremy
3一个包含5万个密钥的authorized_keys文件只有大约25MB大小。可以肯定地说,这个文件会完全被缓存到文件系统缓冲区中。我想,在文件中找到密钥所需的时间将远远小于使用该密钥对用户进行身份验证所需的时间。 - cjc
1个回答

你可以在GitHub上看到这个执行速度有多快。使用那么多密钥并不会导致显著的瓶颈。 然而,正如他们2009年的博客中所记录的那样,他们已经改变了从数据库获取ssh密钥的方式。感谢:@Jeremey 不过,你创建了超过8,000个密钥,你可以再次用50,000个密钥进行测试。 这些密钥不需要是有效的密钥,只需编写一个生成器,并将文件写入,并将你的附加到末尾。

2同意OP应该用他的硬件测试一个包含50K个密钥的文件。我不确定GitHub是否是一个很好的例子:谁知道他们在后台做了什么?我们所知道的是,他们可能有一个定制的sshd,将authorized_keys存储在Redis中。 - cjc
也许吧,但他们对自己正在进行的工作非常直言不讳,而其他使用gitolab服务公共git存储库的大型网站并未提及此事。当然,并不值得太过重视,但我没有看到任何关于此事的提及。 - vgoff
Gerrit自豪地宣称拥有优化的ssh密钥查找功能,声称其速度比Gitosis更快。我之前并不了解Gerrit项目。 - vgoff
1我在网上找到了一篇关于GitHub工作原理的文章:https://github.com/blog/530-how-we-made-github-fast。他们使用了一个经过修补的SSHD服务器,从MySQL服务器获取密钥。 - Jeremy
2请查看sshd_config文件中的AuthorizedKeysCommand选项。 - Lluís