Rabu, 29 September 2010

Connect SSH with PHP

SSH singkatan dari Secure Shell, secara sederhananya manfaat dari SSH adalah sebuah secara untuk mengirimkan perintah-perintah ke pada sebuah komputer/server secara remote (jarak jauh).

Sedangkan PHP secara singkat adalah sebuah server side scripting yang populer untuk membuat web dinamis.

Secara default PHP tidak menyertakan library untuk melakukak SSH. Pada posting ini akan coba dijelasakan untuk melakukan Connection SSH melalui PHP.

Spesifikasi komputer pada posting ini adalah :
  • Operating System Linux Ubuntu Lucid Lynx
  • PHP version 5.3.2
Agar PHP dapat melakukan SSH membutuhkan sebuah library. Library tersebut adalah PHP Secure Communications Library atau biasa di singkat phpseclib

phpseclib adalah sebuah library PHP untuk melakukan berbagai komunikasi melalui SSH, SFTP, Aritmatika Presisi dan berbagai macam Kriptografi. Berikut ini adalah cara menggunakan libary phpseclib untuk SSH.
  1. Download library phpseclib di http://phpseclib.sourceforge.net/
  2. Ekstrak phpseclib0.2.1a.zip di www root/public html web server Anda.
  3. Kemudian buat sebuah file pada folder hasil ekstrak phpseclib0.2.1a.zip lalu sebagi contoh ketikan perintah seperti dibawah ini
<?php
    include('Net/SSH2.php');

    $ssh = new Net_SSH2('127.0.0.1');
    if (!$ssh->login('dendie', 'xxx')) {
        exit('Login Failed');
    }
    echo $ssh->exec('ls');
?>

Pada contoh diatas malakukan connection ssh ke komputer 127.0.0.1 dengan username name dendie dan password xxx Dan $ssh->exec('pwd') adalah perintah command line linux untuk mendapatkan alamat path aktif berada. Hasil perintah di atas adalah sebagai berikut
/home/dendie 

Sebagai Contoh dalam pengembangan selanjutnya Connection SSH melalui PHP dapat dikembangkan untuk melakukan monitoring kapasitas harddisk, CPU Usage, Memori Usage dsb, secara bersamaan dan secara remote kebanyak komputer/server, kemudian hasilnya ditampilkan pada web-page, seperti contoh dibawah ini:



Untuk mempermudah melakukan monitoring serprti di atas dapat menggunakan class actServer, silakan download di klik download

Berikut ini adalah cara menggunakan-nya:
include('actServer.php')
error_reporting(0);

$act = new actServerClass();
$act->setServer('127.0.0.1','username','password');
echo $act->getCpuUsePer(). ' %'; //CPU Active processes dalam persen
echo act->getMemUsePer(). ' %'; //Memori Active processes dalam persen
echo $act->getMemUse(); //Memori Usage (megabyte)
echo $act->getSpace();  //Harddisk Space
echo $act->getDetail('mem'); //Detail Active processes Memori
echo $act->getDetail('cpu'); //Detail Active processes CPU
$act->setflush()

32 komentar:

  1. postingnya bagus, untuk linux ya boz?
    kalau windows apakah juga bisa?

    BalasHapus
  2. thanks...
    windows juga bisa.. yang penting di komputer target nya tersinstal ssh server nya...
    untuk monitoring aktivitas server pada contoh masih diperuntukan linux base karena command-command pake nya punya-nya linux...
    mas tinggal ubah saja perintah command line linux nya menjadi command line windows...

    BalasHapus
  3. mas mau nanya...
    pas send command "ls -ltr" kok hasil tampilan penuh ke kanan yah (tanpa ada line feed)??

    kira bagian mana yah yg diedit? atau ada trik khusus??

    BalasHapus
  4. sebetulnya itu ada newline nya, bila di command line dan file teks tampilannya akan tersusun rapih, tetapi bila di webpage tidak akan terbentu barisnya karena di webpage untuk baris baru menggunakan simbol tag br. Agar hasil commandline terlihat rapih Anda harus mem-parsing output eksekusi SSH2 terlebih dahulu ke array PHP, seperti contoh ini.
    $data = $ssh->exec('ls -ltr');
    $e = explode("\n",$data);
    print_r($e);

    BalasHapus
    Balasan
    1. Thanks, telah remind me dengan perintah Explode ^^

      Hapus
    2. Komentar ini telah dihapus oleh pengarang.

      Hapus
    3. Wow... sudah 1,5 tahun :_

      Hapus
  5. koneksi berhasil
    aq jalanin command ini kok ndak bisa ya
    echo $ssh->exec('c7xtermx -n SGSNSMR2');
    error

    BalasHapus
  6. Komentar ini telah dihapus oleh pengarang.

    BalasHapus
  7. @didik itu perintah untuk melakukan apa ?

    BalasHapus
  8. Permisi mas numpang nanya, phpseclib bisa untuk login ke router cisco dan melakukan comand2nya tidak?
    Thanks

    BalasHapus
  9. saya belum pernah coba itu mas.. pada dasar-nya apabila pada router terpasang ssh server sepertinya bisa melakukan comand2 tersebut.

    BalasHapus
  10. mas kalau login dari client windows ke server linux pake php dengan script dan librari diatas ya ??

    BalasHapus
  11. Mas Dendi, mau tanya. Seteleh kita bisa ssh_connect via PHP tersebut, kemudian kita mau coba telnet ke perangkat lain itu gimana cara nya ya..??. Mohon di bantu, thanks.

    BalasHapus
  12. saya belum pernah coba akses pake telnet mas..

    BalasHapus
  13. mas Dendie, kalau program di atas hanya untuk memonitoring saja, apakah dengan ssh dapat mengistall program pada komputer yang dituju?

    terima kasih

    BalasHapus
    Balasan
    1. bisa.. misalak seperti ini

      $ssh->exec('cd /home/app');
      $ssh->exec('./configure');
      $ssh->exec('./make');
      $ssh->exec('./make install');

      Hapus
  14. MAs mau nanya nih, saat sy udh nyoba script ini
    login('root', 'xxx')) {
    exit('Login Failed');
    }
    echo $ssh->exec('ls -ltr');
    ?>

    Koq langsung ngebaca ke folder "/root" ?
    Nah supaya ngebaca ke folder diluar root ("/"), gmn caranya yah?

    BalasHapus
    Balasan
    1. cara nya begini

      echo $ssh->exec('ls -ltr /var/www')

      Hapus
    2. atau begini

      echo $ssh->exec('ls -ltr /');

      Hapus
  15. MAs, script phpnya gmn ya. Supaya perintah $ssh->exec() nya lbh dari satu? Contoh perintahnya ada tiga :

    $ssh->exec('cd ..');
    $ssh->exec('cd /opt');
    $ssh->exec('ls -ltr');

    Sy sdh pake metode IF, tp g bs.

    BalasHapus
    Balasan
    1. Bisa, cara nya melakukan combine command dalam satu eksekusi, seperti contoh di bawah ini.

      $ssh->exec('cd /var/www; ls -al');

      Hapus
  16. login('widhy', '123')) {
    exit('Login Failed');
    }
    echo $ssh->exec('apt-get update');
    ?>

    gan, kalo perintahnya buat update gmana ya? karena saya coba harus dengan root

    BalasHapus
    Balasan
    1. login nya pake root : login('root', 'password')

      Hapus
  17. ga bisa gan, malah login failed, tolongin saya gan

    BalasHapus
    Balasan
    1. Mungkin salah password root nya saja

      Hapus
  18. mas dendie kalo bikin GUInya buat ssh make php gmn caranya ya?
    biar saya tinggal mengetikkan perintah/command shellnya itu lsg dari web browsernya.

    BalasHapus
    Balasan
    1. 1. Bikin form HTML -> http://www.w3schools.com/html/html_forms.asp yang action formnya mengarah ke salah file PHP

      2. pada file PHP tangkap data yang di kirim melalui form tersebut. -> http://www.tutorialspoint.com/php/php_get_post.htm

      Hapus
  19. Sangat membantu artikel ini #terima kasih banyak bang

    BalasHapus
  20. mas dendie kalau monitoringnya realtime tanpa harus di refresh browsernya bijimana yah ? :)

    BalasHapus