2015-04-16 6 views
0

Несмотря на то, что я могу проходить аутентификацию с помощью различных методов на своих серверах, используя библиотеку libssh, методы проверки подлинности не обнаружены. Вот пример кода:методов аутентификации, доступных с использованием libssh

#include <libssh/libssh.h> 
#include <stdio.h> 

int main(int,char**) 
{ 
    ssh_session session = ssh_new(); 
    unsigned short port = 22; 
    int verbosity = SSH_LOG_PROTOCOL; 

    ssh_options_set(session, SSH_OPTIONS_HOST, "localhost"); 
    ssh_options_set(session, SSH_OPTIONS_PORT, &port); 
    ssh_options_set(session, SSH_OPTIONS_LOG_VERBOSITY, &verbosity); 
    ssh_connect(session); 

    int supported_authentication_methods = ssh_userauth_list(session, NULL); 

    printf("Supported methods: %d\n", supported_authentication_methods); 
    return (0); 
} 

А вот выход он производит:

[2015/04/16 19:30:34.367528, 1] ssh_connect: libssh 0.6.4 (c) 2003-2014 Aris Adamantiadis, Andreas Schneider, and libssh contributors. Distributed under the LGPL, please refer to COPYING file for information about your rights, using threading threads_noop 
[2015/04/16 19:30:34.368626, 2] ssh_socket_connect: Nonblocking connection socket: 5 
[2015/04/16 19:30:34.368643, 2] ssh_connect: Socket connecting, now waiting for the callbacks to work 
[2015/04/16 19:30:34.368675, 1] socket_callback_connected: Socket connection callback: 1 (0) 
[2015/04/16 19:30:34.400420, 1] ssh_client_connection_callback: SSH server banner: SSH-2.0-OpenSSH_6.2 
[2015/04/16 19:30:34.400445, 1] ssh_analyze_banner: Analyzing banner: SSH-2.0-OpenSSH_6.2 
[2015/04/16 19:30:34.400456, 1] ssh_analyze_banner: We are talking to an OpenSSH client version: 6.2 (60200) 
[2015/04/16 19:30:34.426885, 2] ssh_packet_dh_reply: Received SSH_KEXDH_REPLY 
[2015/04/16 19:30:34.427292, 2] ssh_client_dh_reply: SSH_MSG_NEWKEYS sent 
[2015/04/16 19:30:34.427311, 2] ssh_packet_newkeys: Received SSH_MSG_NEWKEYS 
[2015/04/16 19:30:34.427908, 2] ssh_packet_newkeys: Signature verified and valid 
Supported methods: 0 

В выходных шоу, ни один из методов аутентификации не обнаружено ... и это странно, потому что я могу определенно войти в localhost, с паролями, с ключами ... что с этим?

ответ

2

согласно docs:

Это требует функцию ssh_userauth_none() называться перед методы доступны.

Итак, сначала позвоните ssh_userauth_none(). Сервер отвечает со списком доступных опций, то есть как ssh_userauth_list() знает, что вернуть.

(void)ssh_userauth_none(session, NULL); 
int supported_authentication_methods = ssh_userauth_list(session, NULL); 
+0

Боже мой ... и я * пилу * это, я просто не понимаю, почему * * он был там, решил не использовать его, и провел последний 1ч30 собирается влево и вправо, чтобы исправить это. .. благодаря ! – user3387633

+0

Хм ... Я попытался реализовать это правильно в своей программе ... Дело в том, что в документации кажется, что 'ssh_userauth_none' должен возвращать' SSH_AUTH_SUCCESS' ... факт, несмотря на то, что он * делает * работа, эта функция не возвращает 'SSH_AUTH_SUCCESS' для меня ... это сложно. – user3387633

+0

Я вообще не читаю документы. Если для вашего сервера не разрешен полностью анонимный доступ, я бы ожидал SSH_AUTH_DENIED или SSH_AUTH_PARTIAL –

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