LINUX.ORG.RU

libssh2 - работа с шеллом

 


0

1

Не получается заставить работать с шеллом libssh2, вернее оно работает но с очень странными глюками.

Первый глюк - сразу после запуска я получаю неполный вывод приветствия сессии. При подключении из терминала оно выглядит вот так:

Welcome to Ubuntu 16.04.1 LTS (GNU/Linux 4.4.0-154-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

Могут быть обновлены 338 пакетов.
12 обновлений касаются безопасности системы.

New release '18.04.2 LTS' available.
Run 'do-release-upgrade' to upgrade to it.

Last login: Fri Jul 19 22:14:38 2019 from 127.0.0.1
$

При коннекте через libssh2 получаю кусок без последней строки с двумя \n в конце:

Welcome to Ubuntu 16.04.1 LTS (GNU/Linux 4.4.0-154-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

Могут быть обновлены 338 пакетов.
12 обновлений касаются безопасности системы.

New release '18.04.2 LTS' available.
Run 'do-release-upgrade' to upgrade to it.


Второй глюк - я могу выполнять команды, но нет промта. Т е если после вышеприведенного вывода сделать например ls, я получу вывод команды, но без промта в конце. Явная установка PS1 не дает никакого эффекта, echo $PS1 выводит установленный промпт, но он не отображается.

Третий глюк - я могу выполнять команды но не все. Например если отправить несуществующую команду xxx то я не получу назад вообще никакого вывода.

Подскажите куда копать?

З. Ы. Программа работает в один поток.


С libssh2 не знаком, но подозреваю, что дело в этом:

If you plan using an interactive shell, you need to create a pseud-terminal on the remote side. A remote terminal is usually referred to as a «pty», for «pseudo-teletype». The remote processes won’t see the difference with a real text-oriented terminal.

если отправить несуществующую команду xxx то я не получу назад вообще никакого вывода.

Ошибки же в stderr и читать их, видимо, надо отдельной функцией.

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

Ну елки палки, столько времени я убил на прыгание вокруг да около, а оказалось проблема всего в двух дополнительных строчках.

Спасибо, проблема действительно оказалась именно в этом - нужно было запросить псевдотерминал до запроса шелла.

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