LINUX.ORG.RU

libssh2 и LIBSSH2_ERROR_SOCKET_SEND

 ,


1

3

Подскажите что делаю не так!?

Вроде все по примеру, а не выходит каменный цветок на libssh2_userauth_publickey_fromfile выпадает с ошибкой -7

при этом libssh2_userauth_list возвращает publickey

    int sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (sock == -1)
    {
        cerr << "Ошибка открытия сокета\n";
        return false;
    }

    struct sockaddr_in sin;
    sin.sin_family = AF_INET;
    sin.sin_port = htons(22);
    sin.sin_addr.s_addr = inet_addr("ip удаленного сервера");
    if(sin.sin_addr.s_addr == INADDR_NONE)
    {
        cerr << "Невервый адрес\n";
        return false;
    }

    if(connect(sock, (struct sockaddr*)(&sin), sizeof(struct sockaddr_in)) != 0)
    {
        cerr << "Ошибка соединения с сокетом\n";
        return false;
    }

    LIBSSH2_SESSION * session = libssh2_session_init();
    if (!session)
    {
        cerr << "Ошибка инициализации SSH сессии\n";
        return false;
    }

    int ret;
    if (ret = libssh2_session_startup(session, sock))
    {
        cerr << "Ошибка запуска SSH сессии " << ret << endl;
        return false;
    }

    cout << libssh2_userauth_list(session, "wolverin", strlen("wolverin")) << endl;

    if(ret = libssh2_userauth_publickey_fromfile(session, "wolverin", "/home/wolverin/.ssh/id_rsa.pub", "/home/wolverin/.ssh/id_rsa", ""))
    {
        cerr << "Ошибка аутентификации " << ret << endl;
        libssh2_session_disconnect(session, "Client disconnecting normally WTF");
        libssh2_session_free(session);
        close(sock);
        return false;
    }

    LIBSSH2_CHANNEL * channel = libssh2_channel_direct_tcpip_ex(session, "ip удаленного сервера", 5550, "127.0.0.1", 5552);
    if (!channel)
    {
        cerr << "Ошибка создания тунеля\n";
        libssh2_session_disconnect(session, "Client disconnecting normally");
        libssh2_session_free(session);
        close(sock);
        return false;
    }

★★★

Ответ на: комментарий от wolverin

может версия из репозитория старовата 1.4.3-4.1+deb8u2

хотя ssh клиент же как то работает в этой версии дебиана

wolverin ★★★
() автор топика
Ответ на: комментарий от Elyas

стандартный sshd, повысить уровень журнала

повысил до local7, но ничего кроме libssh2_session_disconnect(session, «Client disconnecting normally WTF»); там не появляется

wolverin ★★★
() автор топика
Ответ на: комментарий от wolverin

попробовал публичный ключ сделать на основе openssl

openssl rsa -in id_rsa -pubout -out id_rsa.pem
теперь LIBSSH2_ERROR_PUBLICKEY_UNVERIFIED -19 Invalid public key

wolverin ★★★
() автор топика
Ответ на: комментарий от wolverin

продолжаю искать смысл жизни (((

предполагая, что версия 1.4.3-4.1+deb8u2 из репозитория кривая, взял с другого сервера но уже Debian 9 из такого же пакета libssh2-1 версию 1.7.0-1 - ошибка прежняя

wolverin ★★★
() автор топика
Последнее исправление: wolverin (всего исправлений: 1)
Ответ на: комментарий от wolverin

может линкую как то криво???

g++ -o AddWork AddWork.cpp -L./ibpp/core -lfbclient -libpp -DIBPP_LINUX -L. -lssh2-1.7.0 -lgcrypt
хотя вот что ставь lgcrypt что убирай - компилится и работает одинаково

wolverin ★★★
() автор топика
Ответ на: комментарий от wolverin

качнул официальные исходники libssh2-1.8.2 делаю ./configure вываливается

checking for libssl... no
configure: error: No crypto library found!
Try --with-libssl-prefix=PATH
 or --with-libgcrypt-prefix=PATH
 or --with-libmbedtls-prefix=PATH
 or --with-wincng on Windows
какую еще crypto library ему надо, libgcrypt.so в системе есть, она линкуется!?

wolverin ★★★
() автор топика
Ответ на: комментарий от wolverin

какой то бред, сконфигурировал и собрал c libssl и с дебагом

  version:          1.8.2
  Host type:        x86_64-pc-linux-gnu
  Install prefix:   /usr/local
  Compiler:         gcc
  Compiler flags:    -g -g -W -Wall -Wwrite-strings -pedantic -Wpointer-arith -Wnested-externs -Winline -Wmissing-prototypes -Wmissing-declarations -Wundef -Wno-long-long -Wsign-compare -Wfloat-equal -Wno-format-nonliteral -Wendif-labels -Wstrict-prototypes -Wdeclaration-after-statement
  Library types:    Shared=yes, Static=yes
  Crypto library:   OpenSSL (AES-CTR: yes)
  Clear memory:     unsupported
  Debug build:      yes
  Build examples:   yes
  Path to sshd:     /usr/sbin/sshd (only for self-tests)
  zlib compression: yes
пытаюсь выкинуть этот чертов публичный ключ и посылать только приватный, а получаю опять ошибку на эту гребанную libgcrypt
Ошибка аутентификации -16
Unable to extract public key from private key file: Method unimplemented in libgcrypt backend

wolverin ★★★
() автор топика
Ответ на: комментарий от wolverin

засунул в код функцию libssh2_version(0), которая вернула что все еще 1.4.3 пользую, хотя линкую собранную libssh2-1.8.2-ssl-dbg

как лежащую в одной папке с исходником

-L. -lssh2-1.8.2-ssl-dbg

wolverin ★★★
() автор топика
Ответ на: комментарий от wolverin

заснулу новую либу в /usr/lib/x86_64-linux-gnu и

[libssh2] 0.235265 Userauth: Publickey authentication successful
[libssh2] 0.235310 Socket: Sent 96/96 bytes at 0x20d3900
так что вопрос закрываю - версия в репозитории КРИВАЯ, судя по гуглу такую же ошибку дает и версия 1.8.1, сейчас просто по приватному ключу без пароля залетает

осталась разобраться как правильно залинковать новую библиотеку

wolverin ★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.