phpseclib ssh прикрепить к экрану процесс exec команды echo response - PullRequest
1 голос
/ 01 апреля 2012

Привет! Я пытаюсь использовать Phpseclib для подключения к своему выделенному серверу, а затем подключиться к процессу экрана, а затем выполнить команды в процессе экрана и вернуть результат,

Я могу заставить php подключиться к серверу, и я думаю, что заново подключиться к экранному процессу, но команда, которую я пытаюсь вернуть обратно, просто возвращает «1» вместо того, что я ожидал.

<?php
set_include_path(get_include_path() . PATH_SEPARATOR . '.././static/classes/phpseclib');

include('.././static/classes/phpseclib/Net/SFTP.php');

//SSH Run Command
$ssh = new Net_SSH2($host);
if (!$ssh->login($user,$pass)) {
    exit('Login Failed SSH');
}

//Run the server
echo 'Attaching to screen process...';
$ssh->exec('screen -r server1');
echo 'Attached';
echo $ssh->write('status\n');
?>

Если бы кто-то мог пролить свет на мою проблему, я был бы признателен.

Также дополнительная информация, по которой я подключаюсь так, потому что это сервер SRCDS, к которому я подключаюсь, и я могу использовать скрипт php для запроса к игровому серверу srcds, но он не будет работать, потому что я на общем хостинге, который блокирует порты, к которым нужно подключиться через сокет.

1 Ответ

0 голосов
/ 02 апреля 2012

Вам, вероятно, нужно сделать $ssh->write("screen -r server1\n") вместо $ssh->exec('screen -r server1');

Проблема с exec() заключается в том, что он всегда выполняет команды на новом канале. Это не проблема с phpseclib, а с протоколом SSH. Это похоже на выполнение «screen -r server1» через putty, закрытие putty, повторное открытие putty, выполнение «status» и ожидание, что оно выдаст то, что вы хотите. Не будет.

...