可以从网站管理linux服务吗?

时间:2012-05-09 07:40:30

标签: php html shell scripting webpage

我有几个服务,可以访问网站。就像一个简单的网站登录用户和访问开始|停止|重新启动服务,如果他们关闭。 IDK如果在网页中可以实现这一点,那就不是所有经历过的了。

从shell我可以输入 service b3-2 start ,服务将启动。现在我只想在开始|停止|重新启动按钮的网页中找到它,并且在所有内容下面都有信息/状态区域和输出框以显示错误(如果有的话)。

如果有人能帮助我,那就太棒了。我的问题主要是 -

  • 是否可以从网页上执行此操作?
  • 如果是这样,创作会有多难?
  • 你能告诉我什么才能更好地帮助我?

在附注中我主要使用这个仅用于我的B3服务(Big Brother Bot)。

2 个答案:

答案 0 :(得分:1)

我很久以前在PHP中用http://de.php.net/manual/en/book.ssh2.php模块写了一个'Eggdrop Webinterface'。

您可以通过SSH连接此模块到您的Linux服务器并提交shell命令。在我的Webinterface中,我编写了一个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表中。

希望小班帮助

答案 1 :(得分:0)

如果你想“自己写”你可以混合使用bash,php和/或其他脚本..