Russian Qt Forum
Сентябрь 30, 2024, 14:33 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QProcess и консольный SSH клиент  (Прочитано 9710 раз)
DmitryKSL
Гость
« : Июнь 08, 2010, 07:42 »

Надо подключиться по SSH к железке, ввести команду и получить результат. Взял за основу код которым я скрипт запускал, но тут мозгов явно не хватает. Два дня в нете просидел ничего подобного не нашел,вернее похожие проблемы были а решения нет. Использовать какие то сторонние библиотеки для меня совершенно непонятно. Скачал libssh2-1.1 посмотрел на файлы, понял что я баран.
Создал новый проект. Добавил туда код касаемо QProcess.
Вот исходник.
Код:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QDebug"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    stroka="";
    ui->setupUi(this);
    SSH();
}

MainWindow::~MainWindow()
{   myProcess->close();
    delete ui;
}

void MainWindow::changeEvent(QEvent *e)
{
    QMainWindow::changeEvent(e);
    switch (e->type()) {
    case QEvent::LanguageChange:
        ui->retranslateUi(this);
        break;
    default:
        break;
    }
}
void MainWindow::SSH()
{
  QString program;
  QStringList arguments;
  //program="C:\\Program Files\\OpenSSH\\bin\\ssh.exe";
  program="C:\\Program Files\\ICW\\Bin\\ssh.exe";
  arguments <<"root@192.168.0.55";
  myProcess=new QProcess();
  myProcess->setEnvironment(QProcess::systemEnvironment());
  //myProcess->setProcessChannelMode(QProcess::ForwardedChannels);
   connect(myProcess, SIGNAL(readyReadStandardOutput()), this, SLOT(slotMessages()) );
   connect(myProcess,SIGNAL(finished(int,QProcess::ExitStatus)),this,SLOT(processFinished(int,QProcess::ExitStatus)));
   connect(myProcess, SIGNAL(readyReadStandardError()), this, SLOT(slotMessages()) );
   connect(myProcess,SIGNAL(error(QProcess::ProcessError)),this,SLOT(processError(QProcess::ProcessError)));
  myProcess->start(program,arguments);

}

void MainWindow::slotMessages()
{

    stroka=stroka+tr(myProcess->readAllStandardOutput());
    qDebug()<< "Standart error! "<<tr(myProcess->readAllStandardError());
    qDebug()<< stroka;

}

void MainWindow::processFinished(int exitCode,QProcess::ExitStatus ExitStatus)
{
  qDebug()<< "exitcode"<< exitCode;
}
void MainWindow::processError(QProcess::ProcessError error)
{
    qDebug()<< "error! "<<error;
}
Пока экспериментирую с сервером FreeBSD, через консольные приложения подключаюсь (о них пишу ниже).
Установил OpenSSH for Windows v3.8.1 , в коде строчка для него закомментирована. Запускаю.
Вижу:
Standart error!  "Pseudo-terminal will not be allocated because stdin is not a terminal.
Установил Copssh_3.1.1. то же самое.
Нашел в нете что поможет ключ -Т (правда ничего конкретно не понял для чего и почему,все на инглише), добавил его в аргументы.
Приложение запускается но ничего не сообщает. В командной строке оно запрашивает пароль. Тут же я не знаю чего делать.
Записан
DmitryKSL
Гость
« Ответ #1 : Июнь 10, 2010, 06:24 »

Попробовал пойти другим путем.
http://www.prog.org.ru/topic_12847_0.html
Скачал QtSSH. Дальше ничего не понятно. В заголовочных файлах ругается на строки
#include <sys/socket.h>
#include <arpa/inet.h>
#include <libssh2.h>

В файле QSSH.pro  есть строка (что это?)
LIBS += -lssh2

Чего надо сделать? НА сайте только исходники, никакого описания не нашел, оно вообще рабочее?
Записан
niXman
Гость
« Ответ #2 : Июнь 10, 2010, 07:29 »

Цитировать
#include <sys/socket.h>
#include <arpa/inet.h>
говорит о том, что предполагается компилить под линукс.

по ссылке: http://code.google.com/p/qtssh/
используется много никсового кода. так что вряд ли получится скомпилить под венду.

Цитировать
Пока экспериментирую с сервером FreeBSD
упс. недочитал. сорри Обеспокоенный
« Последнее редактирование: Июнь 10, 2010, 07:46 от niXman » Записан
DmitryKSL
Гость
« Ответ #3 : Июнь 10, 2010, 07:57 »

Цитировать
Пока экспериментирую с сервером FreeBSD
упс. недочитал. сорри Обеспокоенный
Да нет, все верно. Qt у меня под XP работает. На FreeBSD только SSH сервер. Получается я ничего не сделаю, раз код под винду не заточен. Переделывать у меня знаний не хватит.

Записан
DmitryKSL
Гость
« Ответ #4 : Июнь 10, 2010, 08:03 »

Тут немного поэкспериментировал. Сгенерировал ключ, чтоб без пароля подключаться (правда с железкой это не прокатит, это так от нечего делать) .С командной строки подключаюсь без пароля. Мой проект пишет:
Warning: no access to tty (Bad file descriptor).
Thus no job control in this shell.
В  логах на сервере в обоих случаях одинаковая запись -  Accepted publickey for root from ...
т.е получается подключается.
Эх, не судьба наверно  Смеющийся
« Последнее редактирование: Июнь 10, 2010, 08:07 от DmitryKSL » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.045 секунд. Запросов: 21.