Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Сети > SSH |
Автор: wowka19 11.8.2014, 09:44 | ||
Пробовал libSSH и libSSH2 - ничего не понял! Необходимо подключиться к серверу по SSH и запускать на нем программу (сервер на Ubuntu). Есть рабочий код на C# (клиент на Windows7) выполняющий эту функцию. Причем делает он это через ПАРОЛЬ!!! Я решил повторить это на C++: взял либу libSSH - но приходит ошибка, мол по паролю этот сервер аутентификацию не проводит. Решил глюк либы, т.к. код на C# РАБОТАЕТ! Взял libSSH2 - та же ситуация: запустил пример из архива с исходниками - в ответ идет перечисление поддерживаемых методов аутентификации, причем метод через password ОТСУТСТВУЕТ! и аутентификация проходит через метод "keyboard-interactive". Вопрос: что за фигня? Почему топорный код на C# работает, в то время как ОБЕ сишные либы (независимые друг от друга проекты) кричат о том, что по паролю этот сервер провести аутентификацию ну никак не может? Вопрос2: Что за чудо-метод "keyboard-interactive"? в примере он реализован через странную функцию (я просто смысл не могу понять):
Вопрос3: Может кто подскажет достойную SSH либу без пережитков pure C и, черт возьми, качественной документацией. |
Автор: borisbn 12.8.2014, 07:03 |
Я делал через http://the.earth.li/~sgtatham/putty/latest/x86/plink.exe Просто запускал его из своей программы |
Автор: wowka19 15.8.2014, 01:10 | ||||
Аутентификация работает, исполнение команд тоже, но возникла проблема. Перед основной работой необходимо запустить скрипт, который в контексте текущей сессии работы с linux-консолью устанавливает переменную среды. Запуск происходит так:
После чего идет основная работа. Например:
Но orbit_tool жалуется, что необходимой ему переменной среды нет. И в итоге ничего не выходит. Я полагаю, это происходит из-за того, что после первого запуска plink сессия сбрасывается так как plink завершает свою работу. Как это обойти? |
Автор: wowka19 15.8.2014, 10:28 |
borisbn, в итоге написал баш скрипт, принимающий параметры. Через консоль ("plink login@host -pw pass ...") всё работает. А вот из QProcess - ничего! Возвращает пустоту. Ошибок нет: всё по нулям. Что я делаю не так? пробовал всё писать в QProcess::start("flghdpigjpdijh") и отдельно от аргументов QProcess::start("p", QStringList...). создавал QProcess и в стеке с QProcess::waitForFinished() и в куче, привязываясь к сигналу fiinished() и readyRead()... Толку ноль :( |
Автор: wowka19 15.8.2014, 10:45 |
В итоге я нашел вывод - он оказался в readAllStandardError(); Но почему?? ведь сигнал finished(int exitCode, QProcess::ExitStatus exitStatus) вернул 0 и NormalExit ??? |