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

sshd: регистрация открытого ключа клиента

Мне нужно запустить SSH-сервер и зарегистрировать IP-адрес и открытый ключ любого клиента, который попытки для подключения (без фактического предоставления доступа).

Вариант использования следующий: я развертываю это веб-приложение на удаленном хосте, который в процессе сборки извлекает некоторые зависимости из github / bitbucket (git использует ssh, который использует ключи). Теперь, если я хочу, чтобы этот хост-сервер имел доступ к некоторым частным репозиториям, мне нужно внести его открытый ключ в белый список, однако хост не предоставляет доступ для чтения ключа непосредственно из файловой системы. Но я могу указать ему на любой SSH-хост, и он установит соединение, предположительно выдав свой открытый ключ. Я хочу это записать.

Любые предложения приветствуются.

Если вам нужен открытый ключ для внесения в белый список, вы не можете выбрать его из неудачной попытки. Речь идет совсем не о sshd или его конфигурации, а о самом протоколе, поскольку аутентификация с открытым ключом проходит следующим образом:

  1. Клиент отправляет идентификатор для пары ключей.
  2. Сервер сравнивает идентификатор с authorized_keys файл.
  3. Сервер генерирует случайное число и использует соответствующий открытый ключ для его шифрования.
  4. Сервер отправляет его клиенту.
  5. Клиент расшифровывает его, объединяет с общим ключом сеанса и отправляет обратно MD5 этого.
  6. Сервер самостоятельно вычисляет одну и ту же контрольную сумму и сравнивает их вместе.

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

Не просто записать то, чего он даже не знает.

sshd фактически не регистрирует публичные ключи, используемые при попытках входа в систему, успешных или иных. Самое близкое к нему - это записать отпечаток открытого ключа в LogLevel VERBOSE.

  1. Отправьте публичный ключ другим способом, кроме неудачной попытки входа в систему. Например. загрузить в cgi / php скрипт, который записывает (либо добавляет, либо переопределяет) ключ к файлу на основе IP-адреса клиентского соединения, видимого сервером.
  2. Задайте при установке запрос GET на определенный URL-адрес на вашем веб-сервере и возьмите его таким образом. (Я считаю, что это худшая версия 1.)
  3. Попросите приложение опубликовать свой публичный ключ в общедоступном месте, а затем получить его. Это веб-приложение, и прелесть публичных ключей заключается в том, что они не являются секретами.

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