Назад | Перейти на главную страницу

Слишком много / много открытых ключей SSH

Новая вещь, которую мне было поручено попробовать / изучить, - это настроить сервер, на котором, по сути, будет от 200 до 300 человек, которые будут подключаться к одному пользователю для выполнения задачи. Возможно, им нужно будет делать это один или несколько раз в день. Проблема в том, что каждый из них может подключать столько устройств, сколько хочет. Если у каждого из них есть 3 или 4 устройства с общедоступными ssh-ключами, мы потенциально можем получить до 1000 ключей в файле autorized_keys. Учитывая, что на самом деле это всего лишь текстовый файл, 1000 ключей потенциально могут снизить производительность.

Есть ли способ вытащить эти ключи в db или что-то еще вместо файла authorized_keys?

Из любопытства это может не иметь большого значения для 1000 пользователей, но это заставило меня задуматься, как кто-то вроде github может обрабатывать 500000 пользователей на своем git@github.com. Я знаю, что лично у меня есть 3 разных ключа, связанных с моей учетной записью, и я знаю много других с несколькими. Я не привык к таким масштабным вещам, поэтому мне очень любопытно. Является ли LDAP таким эффективным, чтобы справиться с этим? или еще какой нибудь ssh шлюз?

Вам действительно нужна база данных, только если у вас более 1000000 записей. Каждая клавиша довольно маленькая (даже не килобайт). Пока размер файла меньше, скажем, 20 мегабайт, чтение файла тривиально (здесь мы говорим о миллисекундах). Ваша большая проблема - это балансировка нагрузки. Если у вас есть сотни одновременных пользователей, у вас очень быстро возникнут проблемы с ресурсами.

Ваш вариант использования (1000 ключей) приведет к примерно 400 килобайтам файла ключей ssh. Не такое уж большое дело. Мой неудачный скрипт прочитал этот файл за 30 миллисекунд. Удвойте или утроите его для разбора, и это все равно не имеет большого значения.

Вам понадобится другой сервер для обработки нагрузки, прежде чем чтение текстового файла станет проблемой.

В серверном слове «большой» относительно. 500000 - не большая проблема для парсинга текстового файла. Например, мой файл id_rsa.pub имеет размер 400 байт. Совсем не большой. Умножим это на 500000. Получаем 190 мегабайт. Он относительно большой, но не слишком большой. Я написал простой скрипт NodeJS для чтения файла размером 174 мегабайта, и это заняло менее 2 секунд. Это на обычном (не серверном) жестком диске (7200 об / мин), и даже не в рейде.

SSH не обязательно каждый раз читать весь файл, и файл, вероятно, будет кэширован в память. В любом случае пара секунд загрузки не имеет большого значения для одноразового процесса, такого как доступ по SSH.

Прелесть github в том, что у пользователей действительно нет доступа по SSH. Пользователи могут только отправлять код и не могут напрямую подключаться к серверу. Это, конечно, проблема безопасности, но определенно проблема производительности.

Я почти уверен, что в таких местах, как github, есть несколько серверов для обработки нагрузки.