Libssh – MESSAGE SSH non implémenté

J’essaie de me connecter avec ssh_connect et libssh, mais j’obtiens l’erreur suivante. Je n’ai aucune idée de ce que cela signifie. Des pensées?

[2014/09/30 00:53:00.015877, 2] channel_open: Creating a channel 43 with 64000 window and 32768 max packet [2014/09/30 00:53:00.050776, 1] ssh_packet_unimplemented: Received SSH_MSG_UNIMPLEMENTED (sequence number 3) [2014/09/30 00:54:59.949316, 1] ssh_socket_exception_callback: Socket exception callback: 1 (0) [2014/09/30 00:54:59.949483, 1] ssh_socket_exception_callback: Socket error: disconnected Error allocating SFTP session: Socket error: disconnected 

voici le code

 ** Initialises SSH Session **/ ssh_session initialise_ssh(char* host, int port) { ssh_session my_ssh_session; int verbosity = SSH_LOG_PROTOCOL; my_ssh_session = ssh_new(); ssh_options_set(my_ssh_session, SSH_OPTIONS_HOST, host); ssh_options_set(my_ssh_session, SSH_OPTIONS_LOG_VERBOSITY, &verbosity); ssh_options_set(my_ssh_session, SSH_OPTIONS_PORT, &port); rc = ssh_connect(current_session); if (rc != SSH_OK) { fprintf(stderr, "Error connecting host: %s\n", ssh_get_error(current_session)); return my_ssh_session; } 

    L’object ssh_session que vous créez dans votre fonction initialise_ssh () n’est pas encore complètement initialisé et ne peut donc pas être directement utilisé pour créer une session sftp comme vous le tentez. Cela provoque une certaine authentification et donc le socket est fermé après un délai d’attente de 120 secondes, ce qui constitue votre exception.

    Après votre appel ssh_connect () réussi, vous devez authentifier l’hôte (fonction ssh_is_server_known (), entre autres) et vous devez fournir un moyen d’authentifier l’utilisateur: un ssh_userauth_publickey_auto (mon_ssh_session, NULL, NULL) le ferait si vous avez un identifiant de clé publique pour l’utilisateur qui exécute votre application.

    Cochez “Authentification du serveur” et “Authentification de l’utilisateur” dans http://api.libssh.org/master/libssh_tutor_guided_tour.html

    Après cela, vous êtes configuré pour utiliser votre session afin de travailler, exécutez sftp dans votre exemple.

    Vous créez ma_ssh_session dans la fonction. Sa scope est limitée à la fonction initialise_ssh. Utilisez plutôt des pointeurs ou envoyez l’object de session à initialiser en tant que paramètre.

     void initialise_ssh(char* host, int port, session* my_ssh_session_ptr) { int verbosity = SSH_LOG_PROTOCOL; *my_ssh_session_ptr = ssh_new(); ssh_options_set(*my_ssh_session_ptr, SSH_OPTIONS_HOST, host); ssh_options_set(*my_ssh_session_ptr, SSH_OPTIONS_LOG_VERBOSITY, &verbosity); ssh_options_set(*my_ssh_session_ptr, SSH_OPTIONS_PORT, &port); rc = ssh_connect(current_session); if (rc != SSH_OK) { fprintf(stderr, "Error connecting host: %s\n", ssh_get_error(current_session)); }