sshd: вход открытого ключа клиента

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

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

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

2
задан 28 March 2015 в 07:33
2 ответа

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

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

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

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

2
ответ дан 3 December 2019 в 11:38

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

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

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

0
ответ дан 3 December 2019 в 11:38

Теги

Похожие вопросы