php - 可以从网站管理 Linux 服务吗?

标签 php shell scripting html

我有几个 id 想从网站访问的服务。就像一个简单的网站,用户可以登录并在服务关闭时访问启动|停止|重启服务。 IDK 如果这在网页中是可能的,因为我还没有体验过。

在 shell 中,我只需键入 service b3-2 start 服务就会启动。现在我只想能够在网页中执行此操作,其中开始|停止|重新启动是按钮,并且在所有内容下方都有一个信息/状态区域和一个输出框以显示错误(如果有)。

如果有人能帮我解决这个问题那就太好了。我的问题主要是-

  • 是否可以从网页执行此操作?
  • 如果是的话,创作难度有多大?
  • 你还能告诉我什么来更好地帮助我解决这个问题?

顺便说一句,我主要只将它用于我的 B3 服务(Big Brother Bot)。

最佳答案

我很久以前用 PHP 用 http://de.php.net/manual/en/book.ssh2.php 写了一个“Eggdrop Web 界面”模块。

您可以通过 SSH 连接此模块到您的 Linux 服务器并提交 shell 命令。在我的 Web 界面中,我编写了一个 Shellscript 来完成所有工作(添加/删除/启动/停止等)并通过 php ssh2 模块执行。

<?php
class ssh
{
private $sql;
private $con;

private static $instance;

public static function getInstance()
{
    if (!self::$instance)
    {
        self::$instance = new ssh();
    }
    return self::$instance;
}

function __construct()
{
    $this->sql = sql::getInstance(); 
}

/* Verbindung über SSH aufnehmen */
public function connect ($rootid)
{
    global $cfg;

    $q = $this->sql->query("SELECT ROOT_SSH_IP, ROOT_SSH_USER, ROOT_SSH_PASS, ROOT_SSH_PORT FROM ".prfx."rootserver WHERE ROOT_ID = '".$rootid."'");

    $r = $this->sql->content($q);

    $blowfish = new Blowfish($cfg["BLOWFISHKEY"]);

    $pass = $blowfish->Decrypt($r["ROOT_SSH_PASS"]);

    $this->ssh_connect($r["ROOT_SSH_IP"], $r["ROOT_SSH_PORT"], $pass, $r["ROOT_SSH_USER"]);

    return true;

}

/* Disconnect */
public function my_ssh_disconnect($reason, $message, $language) {
    printf("Server disconnected with reason code [%d] and message: %s\n",
    $reason, $message);

    return true;
}

/* Eigentliche ssh_connect Funktion */
public function ssh_connect($host, $port, $pass, $user="root")
{
    $methods = array(
      'kex' => 'diffie-hellman-group1-sha1',
      'client_to_server' => array(
        'crypt' => '3des-cbc',
        'comp' => 'none'),
      'server_to_client' => array(
        'crypt' => 'aes256-cbc,aes192-cbc,aes128-cbc',
        'comp' => 'none'));

    $callbacks = array();

    $this->con = ssh2_connect($host, $port, $methods, $callbacks);
    if (!$this->con) die('Connection failed');
    else {

        if (!ssh2_auth_password($this->con, $user, trim($pass))) {
            die("login failed.");
        }
    }

    return true;
}

/* Befehle ausführen */
public function ssh_exec ($cmd, $stderr=true)
{
    if ($stderr == true)
    {
        $stream = ssh2_exec($this->con, $cmd);

        $err_stream = ssh2_fetch_stream($stream, SSH2_STREAM_STDERR);

        stream_set_blocking($err_stream, true);
        $result_err = stream_get_contents($err_stream);

        if (empty($result_err))
        {
            stream_set_blocking($stream, true);

            $out = stream_get_contents($stream);

            return $out;
        }
        else {
            return $result_err;
        }
    }
    else {

        $stream = ssh2_exec($this->con, $cmd);

        stream_set_blocking($stream, true);

        $out = stream_get_contents($stream);

        return $out;
    }
}

/* Verbindung beenden */
public function quit()
{
    $stream = ssh2_exec($this->con, 'exit');
    stream_set_blocking($stream, true);
    $output = stream_get_contents($stream);

    return true;                
}

在我的例子中,我使用加密密码将 Serveraccounts 存储在 MySQL 表中。

希望小课有所帮助

关于php - 可以从网站管理 Linux 服务吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10511784/

相关文章:

php - 是否有一种标准方法来验证 DATETIME 值的格式是否正确以及它是否是有效日期?

php - Laravel - 分页随机记录

string - 如果字符串包含 case 语句

linux - 如何使用 bash 脚本从多个服务器获取 java 版本/spark 版本/pip 列表和 anaconda 列表

输出函数结果的 Bash 脚本

php - 在 PHP 中使用单个 header() 调用发送多个 HTTP header

php - 去年这个日期的 MySQL 语句

python - Windows subprocess.Popen 没有 shell=True 的批处理文件

bash - 嵌套的 Herodoc 操作顺序

python - 在 python 中读取空终止字符串