太多/大量的公共SSH密钥

我一直在尝试/探索的一件新事情是build立一个服务器,基本上有200到300人同时在一个用户身上运行一个任务。 他们可能只需要每天一次或多次执行一次。 问题是,他们可以每个连接尽可能多的设备,因为他们想要的。 在外部机会,他们每个有3或4个设备有公共ssh密钥,我们可能会得到多达1000个密钥在autorized_keys文件。 考虑到这只是一个文本文件,1000个键可能会有性能问题。

反正有没有把这个出来的密钥到数据库或其他东西,而不是authorized_keys文件?

好奇地注意到这对1000个用户来说可能不是什么大问题,但是让我想知道github这样的人能够如何处理他们的[email protected]用户上的50万用户。 我知道我个人有三个不同的密钥与我的帐户相关联,我知道很多其他人多。 我不习惯这样的规模,所以真的好奇。 LDAP的这个性能来pipe理这个? 甚至是某种ssh网关?

如果您有超过1,000,000个条目,您只需要一个数据库。 每个键都很小(甚至不是千字节)。 只要文件less于20兆字节,文件中的读取就是微不足道的(我们在这里说的是毫秒)。 你更大的问题是负载平衡。 如果您拥有数百个并发用户,您将很快遇到资源问题。

您的用例(1000个密钥)将导致约400千字节的ssh密钥文件。 没有那么大的一笔交易。 我的脚本花费了30毫秒的时间来读取这个文件。 双重或三重分析,这仍然没有什么大不了的。

在阅读文本文件之前,您需要另一台服务器来处理负载。

在服务器的话,大是相对的。 对于通过文本文件parsing来说,500,000不是什么大问题。 例如,我的id_rsa.pub文件是400字节。 一点都不大。 让这个乘以50万。 我们得到190兆字节。 这个比较大,但不是太大。 我写了一个简单的NodeJS脚本来读取一个大小为174兆字节的文件,花费不到2秒钟的时间。 这是一个普通的(不是服务器级的)硬盘(7200 RPM),甚至没有在RAID中。

SSH不必每次都读取整个文件,文件可能会被caching到内存中。 无论哪种情况,几秒钟的加载时间对于一次性进程(如SSH访问)来说都不是什么大问题。

github背后的美妙之处在于用户并没有真正的SSH访问权限。 用户只能推送代码,而不能直接连接到服务器。 这当然是一个安全问题,但这绝对是一个性能问题。

我很确定像github这样的地方有几台服务器来处理负载。