Для пользователей, основанных на ключах, пользователь должен добавить свои открытые ключи в файл ~ / .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;
}
Из исходного кода он просто перебирает все ключи до тех пор, пока не будет найден соответствующий ключ:
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;
}
Из исходного кода он просто перебирает все ключи до тех пор, пока не будет найден соответствующий ключ:
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;
}