• 4712阅读
  • 1回复

[提问]libssh2问题求助,明明密码正确但是还提示密码错误 [复制链接]

上一主题 下一主题
离线wind_133
 

只看楼主 倒序阅读 楼主  发表于: 2015-04-06
求大神帮忙。
suse linux下的。
报错:

Password authentication failed
Init session failed!
代码如下:

mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QTcpSocket>
#include <libssh2.h>
#include <iostream>


namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void on_runProgram_clicked();

private:
    Ui::MainWindow *ui;

    int run_program();
    void closeChannel(LIBSSH2_CHANNEL *channel);


    int initSession();



    int closeSession();

    QTcpSocket *socket_;
    LIBSSH2_SESSION *session_;
    LIBSSH2_AGENT *agent_;
};

#endif // MAINWINDOW_H


mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"

#include <QtDebug>

#include <QByteArray>
#include <QTcpServer>
#include <QTcpSocket>
#include <QTimer>
#include <QFile>
#include <QFileInfo>

//#include <libssh2_config.h>
#include <libssh2.h>
//#include <libssh2_sftp.h>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    session_(0),
    socket_(0),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}


MainWindow::~MainWindow()
{
    if(session_ && socket_)
    {
        closeSession();
    }
    delete ui;
}
void MainWindow::on_runProgram_clicked()
{
    //qDebug()<<run_program();

    if(initSession()!=1)
    {
        qDebug()<<"Init session failed!";
        return;
    }
}
void MainWindow::closeChannel(LIBSSH2_CHANNEL *channel)
{
        if(channel)
        {
            //libssh2_channel_wait_closed(channel);
            libssh2_channel_close(channel);
            libssh2_channel_free(channel); // free will auto close the channel
        }
    }
int MainWindow::initSession()
{
    QString host_ip=ui->host->text();

    const char *user_name="root";
    const char *pass_word="123456";

    //---------- connection --------------
    int libssh2_error = libssh2_init(0);
    if(libssh2_error)
    {
        qDebug("libssh2_init() error: %d", libssh2_error);
        return -2;
    }
    socket_=new QTcpSocket(this);
    socket_->connectToHost(host_ip, 22);
    if(!socket_->waitForConnected())
    {
        qDebug("Error connecting to host %s", host_ip.toLocal8Bit().constData());
        return -1;
    }

    session_ = libssh2_session_init();
    if(!session_)
    {
        qDebug("libssh2_session_init() failed");
        return -2;
    }

    libssh2_error = libssh2_session_startup(session_, socket_->socketDescriptor());
    if(libssh2_error)
    {
        qDebug("libssh2_session_startup() error: %d", libssh2_error);
        return -3;
    }

    {
    /* At this point we havn't yet authenticated.  The first thing to do
     * is check the hostkey's fingerprint against our known hosts Your app
     * may have it hard coded, may go to a file, may present it to the
     * user, that's your call
     */
//    const char *fingerprint = libssh2_hostkey_hash(session_, LIBSSH2_HOSTKEY_HASH_SHA1);
//    qDebug( "Fingerprint: ");
//    for(int i = 0; i < 20; i++)
//        qDebug( "%02X ", (unsigned char)fingerprint);
//        qDebug( "\n");
    }

//    qDebug("Password authentication: [%s] [%s]", user_name.toLocal8Bit().constData(), pass_word.toLocal8Bit().constData());
    //char *a=libssh2_userauth_list(session_, user_name.toLocal8Bit().constData(), user_name.toLocal8Bit().length());
    //std::cout<<*a<<std::endl;
    if(libssh2_userauth_password(
        session_,
        user_name,
        pass_word
    ))
    {
        qDebug("Password authentication failed");

        socket_->disconnectFromHost();
        libssh2_session_disconnect(session_, "Client disconnecting for error");
        libssh2_session_free(session_);
        libssh2_exit();

        return -4;
    }
    return 1;
}
int MainWindow::closeSession()
{
    if(socket_->isOpen())
        socket_->disconnectFromHost();
    socket_->deleteLater();
    socket_=0;
    libssh2_session_disconnect(session_, "Client disconnecting normally");
    libssh2_session_free(session_);
    libssh2_exit();
    return 1;
}

main.cpp
#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}



离线wind_133

只看该作者 1楼 发表于: 2015-04-15
各位帮帮忙啊,卡在这里好久了,百思不得其解
快速回复
限100 字节
 
上一个 下一个