Wednesday, September 29, 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()

35 comments:

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

    ReplyDelete
  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...

    ReplyDelete
  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??

    ReplyDelete
  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);

    ReplyDelete
    Replies
    1. Thanks, telah remind me dengan perintah Explode ^^

      Delete
    2. This comment has been removed by the author.

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

    ReplyDelete
  6. This comment has been removed by the author.

    ReplyDelete
  7. @didik itu perintah untuk melakukan apa ?

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

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

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

    ReplyDelete
  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.

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

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

    terima kasih

    ReplyDelete
    Replies
    1. bisa.. misalak seperti ini

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

      Delete
  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?

    ReplyDelete
    Replies
    1. cara nya begini

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

      Delete
    2. atau begini

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

      Delete
  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.

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

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

      Delete
  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

    ReplyDelete
    Replies
    1. login nya pake root : login('root', 'password')

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

    ReplyDelete
  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.

    ReplyDelete
    Replies
    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

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

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

    ReplyDelete
  21. mas Dendi,
    saya ada error "NET_SSH2_MSG_CHANNEL_FAILURE"
    itu kenapa ya?

    ReplyDelete
  22. Terima kasih mas dendi... Saya bisa akses data ERP via PHP.. mantap betul tutornya mas.. salam dr sby mas.

    ReplyDelete
  23. mau tanya mas, kalau misalkan saya eksekusi file bash pakai exec yang memerlukan inputan nilai bagaimana ya?
    Contoh file tambah.bash akan ada rumus x+y, nanti kalau file bash dijalankan ada pertanyaan input nilai x dan input nilai y, nah penggunaan secara langsungnya gimana ya?

    ReplyDelete