Linux133.fzu.cz

Úvod
MyWiki
PHP
Manuály
Poznámky
Download










Administrace

Třída TSSH2


Třída TSSH2 využívá funkce "Secure Shell2" implementované v PHP 5.x.x. Tyto funkce jsou založené na knihovně 'libssh2' která musí být v daném systému nainstalována. Ani s modulem SSH2 do PHP to není tak jednoduché, ten se musí stáhnout zvlášť a do PHP 'přidělat' a pak teprve je možné s ním celé PHP zkompilovat. Příslušné verze PHP, libssh2 a ssh2, které spolu pasují, jsou ke stažení zde.

Vlastnosti


Žádné veřejné

Metody


__construct( hostname :string [,port :int ] )


array: Get_Auth_Method( username :string )
Metoda 'Get_Auth_Method' vrací pole s dostupnými metodami pro přihlášení. Např. Linux133 vrací:
Array([0]=>publickey [1]=>password [2]=>keyboard-interactive)
Je tedy možné se na něj přihlásit přes klávesnici z konzole, nebo v našem případě přes klíč či heslem.


Login_Auth_Password( username :string, password :string )
Časem přidělám této metodě brášku pro přihlašování pomocí klíče, ale to až vznikne potřeba.


array: Send_Commands( commands :string )
Příkaz/příkazy v parametru metoda pošle na stroj ke kterému je objekt přihlášený a počká si na odpověď. Minimální doba čekání je 0,5 sec. Metoda vrací pole, kde každý řádek pole je každý řádek z výstupu.


Send_Commands_File( filename :string )
Metoda načte soubor zadaný jako parametr. Nelze-li ze souboru číst, vyvolá výjimku. K vnitřní struktuře souboru:
  1. Začíná-li řádek znakem '#',';','!' je celý řádek považován za komentář
  2. Sekvence znaku '${CRLF}' je považována za znak 'Nový řádek'


__destruct()
Standarní destruktor, volá se automaticky při rušení objektu, není třeba se o něj starat.


Příklad použití


<?php
require_once "tssh2.class.php";

try{
  
$ssh2 = new TSsh2("linux133.fzu.cz");
  
$ssh2->Login_Auth_Password("uzivatelske_jmeno","heslo");
  
$a_vystup $ssh2->Send_Commands("/sbin/arp -i eth0 | grep ":" | grep -v "no match"");
  
print_r($a_vystup);
  }
catch (
exception $e){
  echo 
$e;
  }  

?>


Zdrojový kód třídy TSSH2


<?php
class TSsh2{
  protected 
$connection;
  
  public function 
__construct($hostname,$port=22){
    if (!
$this->connection ssh2_connect($hostname,$port)) throw new exception("Unable connection. Incorrect hostname or port?");
    }

  public function 
Get_Auth_Method($username){
    return 
ssh2_auth_none($this->connection,$username);
    }  
  
  public function 
Login_Auth_Password($username,$password){
    if (!
ssh2_auth_password($this->connection,$username,$password)) throw new exception("Unable login via password. Incorrect username,password or this method is not allowed?");
    }  
      
  public function 
Send_Commands($commands){
    
$a_output = array();
    
$a_command explode("n",$commands);
    
$stdio ssh2_shell($this->connection,"");
    if (!
$stdio) throw new exception("Unable execute interactive shell.");
    foreach (
$a_command as $command){
      
$command trim($command);
      if ((
$command{0}!="#")and($command{0}!=";")and($command{0}!="!")){
        
fwrite($stdio,"$commandn");
        
sleep(1);
        
flush();
        while(
$a_output[] = fgets($stdio));
        }
      }
    
fclose($stdio);  
    return 
$a_output
    }
    
  public function 
Send_Commands_File($filename){
    if (!
$commands file_get_contents($filename)) throw new exception("Filename:'$filename' not exists.");
    return 
$this->Send_Commands($commands);
    }  
    
  public function 
__destruct(){
    }   
    
  }

?>