2015-01-18 2 views
1

Может ли кто-нибудь дать пример с сервером с аутентификацией открытого ключа ssh с помощью libssh? Я нашел это https://github.com/substack/libssh/blob/master/examples/samplesshd-tty.c, но это аутентификация с паролем. Может быть, кто-то видел такой пример, но с аутентификацией открытого ключа в libssh. Или может быть, кто-то может изменить код ниже, чтобы получить его.Сервер с аутентификацией открытого ключа ssh с libssh

я добавил для переключения (ssh_message_subtype (сообщение))

    case SSH_AUTH_METHOD_PUBLICKEY: 
         printf("User %s wants to auth with key %s\n", 
           ssh_message_auth_user(message), 
           ssh_message_auth_pubkey(message)); 
         if(authenticate_pubkey(session, message)){ 
          ssh_message_auth_reply_success(message,0); 
          ssh_message_free(message); 
          return 1; 
         } 
         ssh_message_auth_set_methods(message, 
                SSH_AUTH_METHOD_PUBLICKEY); 
         // not authenticated, send default message 
         ssh_message_reply_default(message); 
         break; 

и это

static int authenticate_pubkey(ssh_session session, ssh_message message) 
{ 
    int rc; 
    std::string us = ssh_message_auth_user(message); 
    rc = ssh_userauth_publickey_auto(session, ssh_message_auth_user(message), NULL); 
    if (rc == SSH_AUTH_ERROR) 
    { 
     fprintf(stderr, "Authentication failed: %s\n", 
       ssh_get_error(session)); 
     return SSH_AUTH_ERROR; 
    } 
    return rc; 
} 

ответ

0

Это не очень сложно. Однако я предлагаю написать сервер ssh с обратным вызовом. См. Пример samplesshd-cb.c в исходном коде libssh.

Открытый ключ аутентификации:

Первое чтение RFC 4252 Раздел 7. Он описывает, как открытый ключ аутентификации для работы. Обратный вызов предоставляет вам открытый ключ и сообщает вам, является ли это зондом открытого ключа или логина.

Итак, сначала вы должны прочитать авторизованные ключи. Обычно у вас есть файл со всеми ключами в нем. Вы используете ssh_pki_import_pubkey_base64() для чтения ключа, а затем вызываете ssh_key_cmp(), чтобы сравнить его с открытым ключом, отправленным клиентом. В зависимости от того, является ли это зонд, вы возвращаете частичный успех или успешный успех, если это логин.

Смежные вопросы