Как ssh-сервер выбирает правильный открытый ключ?

Для пользователей, основанных на ключах, пользователь должен добавить свои открытые ключи в файл ~ / .ssh / authorized_keys. Этот файл может содержать несколько ключей, по одному на строку. Итак, как сервер выбирает правильную клавишу для аутентификации пользователя с помощью?

1
задан 7 November 2017 в 12:37

3 ответа

Из исходного кода он просто перебирает все ключи до тех пор, пока не будет найден соответствующий ключ:

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;
}
1
ответ дан 22 May 2018 в 16:44

Из исходного кода он просто перебирает все ключи до тех пор, пока не будет найден соответствующий ключ:

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; }
1
ответ дан 18 July 2018 в 03:45

Из исходного кода он просто перебирает все ключи до тех пор, пока не будет найден соответствующий ключ:

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; }
1
ответ дан 24 July 2018 в 17:55

Другие вопросы по тегам:

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