Я использую 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]');
Спасибо.
Я думаю, что режим PTY это то, что вы ищете? например.
$ssh->enablePTY();
$ssh->exec('mysql mariadb:console myapp newdb');
echo $ssh->read('mysql>');
$ssh->write("show tables\n");
echo $ssh->read('mysql>');
Больше информации:
Других решений пока нет …