Я использую PHPSeclib для доступа к серверу с Докку-альт установлены:Использование phpseclib с оболочкой на заказ оболочки
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]');
Спасибо.
здорово! Это сработало по мере необходимости, хотя я пропустил первый read(), а последний read() не имел аргументов. – romaninsh