我尝试通过 php 将我的 minecraft 白名单更新到我的 linux 服务器。 连接正常,但我不知道他为什么不发送我的命令将用户添加到白名单。
这是我的代码:
$name=$_POST['name'];
$mc=$_POST['mc'];
if($ssh = ssh2_connect('127.0.0.1', 22)) {
if(ssh2_auth_password($ssh, 'root', 'password')) {
$stream = ssh2_exec($ssh, 'screen -R '.$mc.' && '.'whitelist add '.$name.' && whitelist reload');
stream_set_blocking($stream, true);
$data = '';
while($buffer = fread($stream, 4096)) {
$data .= $buffer;
}
fclose($stream);
echo $data;
}
}
最佳答案
您正在使用 &&
加入命令,所有这些命令将在您当前的 shell 中一个接一个地执行,而不是在 screen 内。 screen
可以在选定的 session 中执行命令,但使用它自己的语法。参见 this question ,例如,或 manual .在您的情况下,命令必须如下所示:
screen -S session_name -X stuff $'whitelist add user_name && whitelist reload\n'
注意字符串末尾的 \n
符号。它是执行命令所必需的,因为 screen
不会真正执行它,screen
将“将指定的命令发送到正在运行的 screen session ”,如手册所述。考虑到 screen 将代替您键入命令。并且当您输入命令时,您必须按 Enter/Return 才能执行它。
在 PHP 中你可以这样执行命令:
$stream = ssh2_exec($ssh, "screen -S $mc -X stuff \$'whitelist add $name && whitelist reload\\n'");
关于php - ssh2 通过 php 连接到 linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37500760/