2

Web サイトからアクセスしたいサービスがいくつかあります。ユーザーがログインし、サービスがダウンしている場合にサービスを開始|停止|再起動するためのアクセスを備えた単純なWebサイトのように。これがWebページ内で可能な場合、IDKはまだ経験したことのないものです。

シェルからservice b3-2 startと入力するだけで、サービスが開始されます。ここで、開始|停止|再起動がボタンであり、すべての下に情報/ステータス領域と出力ボックスがあり、エラーがあればそれを表示するWebページ内からそれを実行できるようにしたいだけです。

誰かがこれで私を助けることができれば、それは素晴らしいことです. 主に私の質問は-

  • Webページからこれを行うことは可能ですか?
  • もしそうなら、作成するのはどれほど難しいでしょうか?
  • この件に関して私をよりよく助けるために、他に何を教えていただけますか?

余談ですが、これはほとんど私の B3 サービス (Big Brother Bot) にのみ使用しています。

4

2 に答える 2

1

私はずっと前に、 http: //de.php.net/manual/en/book.ssh2.phpモジュールを使用してPHPで「EggdropWebinterface」を作成しました。

このモジュールとSSH経由でLinuxサーバーに接続し、シェルコマンドを送信できます。私のWebインターフェイスでは、すべてのジョブ(追加/削除/開始/停止など)を実行し、phpssh2モジュールで実行するシェルスクリプトを作成しました。

<?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;                
}

}

私の場合、暗号化されたパスワードを使用してサーバーアカウントをMySQLテーブルに保存しました。

小さなクラスが役立つことを願っています

于 2012-05-09T07:52:16.077 に答える
0

「自分で書きたい」場合は、bash、php、および/または他のスクリプトを混在させることができます..

于 2012-05-09T11:47:54.220 に答える