2014-11-30 2 views
0

Всякий раз, когда я пытаюсь выполнитьSSH2 и PHP не работает «Терминал»

if (!($stream = ssh2_exec($con, "cd $dir; screen -S creative java -Xmx500M -Xms500M -jar spigot.jar"))) { 

он держит возвращается с "Должен быть подключен к терминалу. которые я не могу обойти. Как мне обойти/исправить это?

+0

это на самом деле не PHP вопрос –

+0

@josh это, так как я запуская его в PHP. Я не думаю, что это проблема с SSH, поскольку он отлично работает в SSH. – TehMinecat

+0

Это сеанс SSH в сочетании с PHP. Экран просто не может присоединить ваш сеанс к действительной сессии терминала и выдает эту ошибку. Просто откройте экран. – ChrJantz

ответ

0

Проверьте это: Вы должны передать имя эмуляции pty («vt102», «ansi» и т. Д.), Если вы хотите эмулировать pty или NULL, если вы этого не сделаете.

Передача false преобразует false в строку и будет выделять «терминал».

cf. http://php.net/manual/fr/function.ssh2-exec.php

1

Вы можете попытаться использовать функции чтения()/write() phpseclib. например.

<?php 
include('Net/SSH2.php'); 

$ssh = new Net_SSH2('www.domain.tld'); 
if (!$ssh->login('username', 'password')) { 
    exit('Login Failed'); 
} 

echo $ssh->read('[email protected]:~$'); 
$ssh->write("ls -la\n"); // note the "\n" 
echo $ssh->read('[email protected]:~$'); 
0

Стартовый экран, как и вы, требует действительного TTY, потому что он подключен к вашей сессии. Ssh-реализация PHP просто не создает такой сеанс.

Запуск экран отдельностоящий должен сделать трюк:

screen -d -m [<command>] 

Так что ваш код будет выглядеть так:

if (!($stream = ssh2_exec($con, "cd $dir; screen -d -m -S creative java -Xmx500M -Xms500M -jar spigot.jar"))) {