私はずっと前に、 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テーブルに保存しました。
小さなクラスが役立つことを願っています