0

每当我尝试执行

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

它不断返回“必须连接到终端”。我似乎无法解决。我该如何解决/解决这个问题?

4

3 回答 3

1

您可以尝试使用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:~$');
于 2014-12-02T14:39:36.077 回答
0

测试一下:如果你想模拟一个 pty,你应该传递一个 pty 模拟名称(“vt102”、“ansi”等......),如果你不这样做,你应该传递 NULL。

传递 false 会将 false 转换为字符串,并将分配一个 "" 终端。

参看。http://php.net/manual/fr/function.ssh2-exec.php

于 2014-11-30T17:31:29.197 回答
0

像您一样的启动屏幕需要有效的 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" ))) {
于 2014-12-02T14:44:30.890 回答