每当我尝试执行
if (!($stream = ssh2_exec($con, "cd $dir; screen -S creative java -Xmx500M -Xms500M -jar spigot.jar" ))) {
它不断返回“必须连接到终端”。我似乎无法解决。我该如何解决/解决这个问题?
您可以尝试使用phpseclib的 read() / write() 函数。例如。
<?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:~$');
测试一下:如果你想模拟一个 pty,你应该传递一个 pty 模拟名称(“vt102”、“ansi”等......),如果你不这样做,你应该传递 NULL。
传递 false 会将 false 转换为字符串,并将分配一个 "" 终端。
像您一样的启动屏幕需要有效的 TTY,因为它已附加到您的会话中。PHP 的 ssh 实现不会创建这样的会话。
分离的起始屏幕应该可以解决问题:
screen -d -m [<command>]
所以你的代码看起来像:
if (!($stream = ssh2_exec($con, "cd $dir; screen -d -m -S creative java -Xmx500M -Xms500M -jar spigot.jar" ))) {