2015-01-18 4 views
1

누군가 libssh를 사용하여 ssh 공개 키 인증을 사용하여 서버와 함께 예제를 제공 할 수 있습니까? 이 https://github.com/substack/libssh/blob/master/examples/samplesshd-tty.c을 찾았지만 비밀번호가있는 인증입니다. 이런 예를 보았지만 libssh에 대한 공개 키 인증이있을 수 있습니다. 또는 누군가가 아래 코드를 변경하여이를 가져올 수 있습니다. libssh를 사용하는 ssh 공개 키 인증이있는 서버

나는이 (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 서버를 작성하는 것이 좋습니다. libssh 소스 코드의 samplesshd-cb.c 예제를 참조하십시오.

공개 키 인증 :

먼저 읽기 RFC 4252 섹션 7. 그것은 어떻게 공개 키 인증 작업에 대해 설명합니다. 콜백은 공개 키를 제공하고 그것이 공개 키 또는 로그인의 검사인지 알려줍니다.

먼저 인증 키를 읽어야합니다. 일반적으로 파일에는 모든 키가 들어 있습니다. ssh_pki_import_pubkey_base64()를 사용하여 키를 읽은 다음 ssh_key_cmp()를 호출하여 클라이언트가 보낸 공개 키와 비교합니다. 프로브인지 여부에 따라 부분적인 성공 또는 로그인 인 경우 인증 성공을 반환합니다.