2016-02-16 5 views
1

я следующее:Laravel SSH - создать tmux сеанс

\Config::set('remote.connections.runtime.host', $server->server_ip); 

$commands = [ 
    'tmux' 
]; 

\SSH::run($commands, function($line) { 
    echo $line.PHP_EOL; 
}); 

dd(); 

Это выводит следующее сообщение об ошибке:

open terminal failed: not a terminal

Можно ли создать tmux сеанс таким образом?

ответ

0

Нет ничего, что вы могли бы сделать, чтобы сделать эту работу с помощью Laravel SSH. Однако компонент SSH от Laravel использует phpseclib SSH внутренне, что является более гибким при использовании напрямую.

Теперь я предполагаю, что вы пытаетесь создать сеанс tmux, чтобы начать процесс, который вы хотите продолжить работать в фоновом режиме после завершения соединения SSH. Хорошая часть состоит в том, что поскольку phpseclib является зависимостью от Laravel SSH, он уже существует, поэтому нет необходимости устанавливать его. Я не очень хорошо знаком с tmux и это варианты, но я могу предложить решение, которое использует screen вместо:

use \phpseclib\Net\SSH2; 
use \phpseclib\File\ANSI; 

$ssh = new SSH2('host'); 
$ansi = new ANSI(); 

if ($ssh->login('username', 'password')) { 
    // The command below will start a screen 
    // session and automatically detach it 
    $ssh->write("screen -m -d -S processes top\n"); 

    // You can include the lines below to see the 
    // output of the write command converted to HTML 
    $ansi->appendString($ssh->read()); 
    echo $ansi->getScreen(); 
} 

Это создает новый сеанс автоматически отдельностоящий screen имени processes и запускает команду top в нем. Для подключения к сеансу вы можете просто запустить это в консоли:

ssh [email protected] -t "screen -r processes" 

Это будет повторно подключить сеанс processes, так что вы можете увидеть, что происходит. Конечно, вы можете приспособить это, чтобы использовать tmux, если вы предпочитаете.

Смежные вопросы