Поскольку основанные на ключе подлинные пользователи должны добавить свои открытые ключи к ~/.ssh/authorized_keys файл. Этот файл может содержать много ключей, один на строку. Таким образом, как сервер выбирает правильный ключ для аутентификации пользователя с?
От исходного кода это просто циклично выполняется по всем ключам, пока ключ соответствия не найден:
process_principals(FILE *f, const char *file, struct passwd *pw,
const struct sshkey_cert *cert)
{
//...
while (read_keyfile_line(f, file, line, sizeof(line), &linenum) != -1) {
/* Always consume entire input */
if (found_principal)
continue;
//...
for (i = 0; i < cert->nprincipals; i++) {
if (strcmp(cp, cert->principals[i]) == 0) {
debug3("%s:%lu: matched principal \"%.100s\"",
file, linenum, cert->principals[i]);
if (auth_parse_options(pw, line_opts,
file, linenum) != 1)
continue;
found_principal = 1;
continue;
}
}
}
return found_principal;
}