php - ssh2 通过 php 连接到 linux

标签 php linux ssh gnu-screen

我尝试通过 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/

相关文章:

linux - kern_path() : Failed to return parent path in new 4. 4.* Linux 内核

python - 在 Python 中使用 Paramiko 模块切换到 root 用户时获取 "must be run from a terminal"

php - 无法在php中使用真实密码登录

php - 在 Laravel 4.2 中,密码哈希每次都会产生不同的结果

PHP 重定向 header

php - 我可以使用 isset() 来控制 mysql 查询的执行吗

c++ - 如何开启STL向后兼容?

Linux + Windows 启动选项

ssh - 使用 SSH 别名时如何克隆远程仓库

GitHub 错误 : Key already in use