Всякий раз, когда я пытаюсь выполнить
if (!($stream = ssh2_exec($con, "cd $dir; screen -S creative java -Xmx500M -Xms500M -jar spigot.jar" ))) {
он продолжает возвращаться с «Должен быть подключен к терминалу». который я не могу обойти.
Как мне обойти / исправить это?
Проверьте это:
Вы должны передать имя эмуляции pty («vt102», «ansi» и т. Д.), Если вы хотите эмулировать pty, или NULL, если вы этого не делаете.
Передача false преобразует false в строку и выделяет «» терминал.
Вы можете попробовать использовать phpseclibФункции чтения () / записи (). например.
<?php
include('Net/SSH2.php');
$ssh = new Net_SSH2('www.domain.tld');
if (!$ssh->login('username', 'password')) {
exit('Login Failed');
}
echo $ssh->read('username@username:~$');
$ssh->write("ls -la\n"); // note the "\n"echo $ssh->read('username@username:~$');
Стартовый экран, как и вы, требует действительного 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" ))) {