.: HosiriS :.

Informatica e non solo

Usare SSH tramite script PHP

Posted by hosiris su agosto 22, 2011

La mia necessità è quella di creare una dashboard tramite cui posso monitorare le principali funzionalità del server.

Come fare? La prima scelta è ricaduta subito su http, ma si è presentata immediatamente la problematica che l’utente www-data non ha diritti sul sistema… non volendo rischiare la sicurezza del sistema mi sono messo a cercare una ulteriore soluzione… e proprio nel momento di minor concentrazione mi è balenata l’idea: perchè non aprire un socket ssh tramite php e sfruttare i permessi di un utente X?
Certo la soluzione non è elegante, ma mi permette di raggiungere lo scopo…
Comincio a documentarmi quando scopro che già le librerie esistono… senza reinventare la ruota decido di usare queste.
Per poter agire dobbiamo installare le librerie di sviluppo:

# apt-get install libssh2-1-dev libssh2-php

Per controllare se tutto è ok digitiamo:

php -m | grep ssh2

se la risposta è ssh2 allora possiamo iniziare a programmare😀

Di seguito posto un piccolo script, solo per mostrare un esempio di connessione con l’esecuzione di un comando… ognuno farò quello che più preferisce naturalmente.


if (!function_exists("ssh2_connect")) die("function ssh2_connect doesn't exist");
// log in at server1 on port 22
if(!($con = ssh2_connect("server1", 22))){
  echo "Fallito il tentativo di connessione\n";
} else {
  // tentativo di connessione
  if(!ssh2_auth_password($con, "user", "PaSs")) {
    echo "Fallita la connessione\n";
  } else {
    // OK
    echo "okay: logged in...\n";
    // eseguiamo un comando
    if (!($stream = ssh2_exec($con, "ls -al" ))) {
      echo "Fallito il tentativo di esecuzione del comando\n";
    } else {
      stream_set_blocking($stream, true);
      $data = "";
      while ($buf = fread($stream,4096)) {
        $data .= $buf;
      }
      fclose($stream);
      echo $data;
    }
  }
}

Certo, connettersi in ssh solo per fare un ls è alquanto inutile, ma una volta acceduto possiamo lanciare comandi come: “echo PaSs | sudo -S cat /etc/openvpn/status.log” che ci restituisce il contenuto del file che opportunamente trattato tramite un parser ci permetterebbe di stabilire quali nodi sono connessi alla nostra VPN… magari potremmo pure creare dei pulsanti che ci danno la possibilità di gestire i servizi… Diciamo che le capacità sono infinite.

Buon divertimento

7 Risposte to “Usare SSH tramite script PHP”

  1. blackout said

    bello questo articolo!

  2. gabryp83 said

    ciao volevo sapere ma l’ip del server a cui connettersi dove va messo?

  3. gabryp83 said

    grazie Hosiris, lo script funziona bessimo, adesso ho il problema che non avendo un solo nas collegato al server, ho la necessità di passare l’ip del nas con una vabiabile estratta da un database, tipo $ipnas, ma dopo tante prove non riesco a trovare la soluzione come posso fare? grazie ancora

  4. gabryp83 said

    il comando che devo inviare è “echo User-Name=$username | radclient -x ipnas:1700 disconnect radiussecret, sostituendo ipnas con una variabile in php

    • gabryp83 said

      rileggendo il post che ho scritto, si puo capire che io abbia bisogno dello script php per passare la variabile, invece io cerco il modo per sostituire il valore numerico ip nel comando con una variabile, perchè se al posto dell’ip metto $ipnas già definita nello script, non funziona!

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

 
%d blogger cliccano Mi Piace per questo: