Использование phpseclib с пользовательской оболочкой оболочки

Я использую PHPSeclib для доступа к серверу с установленной dokku-alt:

http://dokku-alt.github.io/how-it-works.html

Следуя типичному примеру, мне удается отправлять команды в пользовательскую оболочку моей учетной записи:

    $ssh=$this->connect();
echo trim($ssh->exec("version");

Это эквивалентно

ssh [email protected] version

и работает как положено. Однако если я попытаюсь выполнить команду, которая ожидает от меня отправки данных через STDIN, возникнет проблема. Согласно документации Net_SSH2, мне нужно write данные в поток SSH вместо использования exec (). К сожалению, мой следующий пример не работает, потому что пользовательская оболочка не получает аргументов и отвечает страницей справки:

    $ssh=$this->connect();
$ssh->write("mysql mariadb:console myapp newdb\n");
$ssh->write("show tables\n");
$ssh->read('[prompt]');

Результат этого идентичен

ssh [email protected]

который просто отвечает со страницей помощи.

Как я могу объединить функциональность «exec» и при этом иметь возможность записи данных? Что-то вроде этого тоже не работает:

    $ssh=$this->connect();
$ssh->exec("mysql mariadb:console myapp newdb");
$ssh->write("show tables\n");
$ssh->read('[prompt]');

Спасибо.

0

Решение

Я думаю, что режим PTY это то, что вы ищете? например.

$ssh->enablePTY();
$ssh->exec('mysql mariadb:console myapp newdb');
echo $ssh->read('mysql>');
$ssh->write("show tables\n");
echo $ssh->read('mysql>');

Больше информации:

http://phpseclib.sourceforge.net/ssh/pty.html

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]