2016年11月29日 星期二

php 透過ssh遠端操作其他server

使用php進行ssh連線至遠端linux執行指令 (只要是開放ssh連線的server,皆可以用此模式下指令)
  • 參考以下網址,複製其PHP SSH CONNECT,存成ssh2.php
http://nsysumis94.pixnet.net/blog/post/17328247-%E5%A6%82%E4%BD%95%E7%94%A8php%E5%81%9Assh%E9%80%A3%E7%B7%9A


  • 使用ssh2 class套件 進行遠端下指令
    <?php
    
    include_once("ssh2.php");
    $shell = new ssh2("172.31.0.1"); //連線ip
    $shell->authPassword("admin","1234"); //帳密
    
    $shell->openShell("xterm"); //開啟一個Terminal
    //開始下指令
    $shell->writeShell("cd /");
    $shell->writeShell("ls");
    
    $shell->writeShell("exit"); //關閉此Terminal
    
    $result=$shell->getResult(); //將下指令的過程與結果(Terminal畫面存進$result)
    printr($result);
    
    ?>
  •  ssh2.php  (ssh2 class)

    <?php

    // ssh protocols
    // note: once openShell method is used, cmdExec does not work

    class ssh2 {

      private $host = 'host';
      private $user = 'user';
      private $port = '22';
      private $password = 'password';
      private $con = null;
      private $shell_type = 'xterm';
      private $shell = null;
      private $log = '';

      function __construct($host='', $port=''  ) {

         if( $host!='' ) $this->host  = $host;
         if( $port!='' ) $this->port  = $port;

         $this->con  = ssh2_connect($this->host, $this->port);
         if( !$this->con ) {
           $this->log .= "Connection failed !";
         }

      }

      function authPassword( $user = '', $password = '' ) {

         if( $user!='' ) $this->user  = $user;
         if( $password!='' ) $this->password  = $password;

         if( !ssh2_auth_password( $this->con, $this->user, $this->password ) ) {
           $this->log .= "Authorization failed !";
         }

      }

      function openShell( $shell_type = '' ) {
        
        if ( $shell_type != '' ) $this->shell_type = $shell_type;
        $this->shell = ssh2_shell( $this->con,  $this->shell_type );
        if( !$this->shell ) $this->log .= " Shell connection failed !";
        stream_set_blocking( $this->shell, true );
      
      }

      function writeShell( $command = '' ) {

        fwrite($this->shell, $command."\n");
          
      }

      function cmdExec( ) {

            $argc = func_num_args();
            $argv = func_get_args();

        $cmd = '';
        for( $i=0; $i<$argc ; $i++) {
            if( $i != ($argc-1) ) {
              $cmd .= $argv[$i]." && ";
            }else{
              $cmd .= $argv[$i];
            }
        }
        echo $cmd;

        $stream = ssh2_exec( $this->con, $cmd );
        stream_set_blocking( $stream, true );
           return stream_get_contents($stream);

      }

      function getLog() {
         return $this->log;

      }

        function getResult(){
            $contents='';
        while (!feof($this->shell)) {
            $contents.=fgets($this->shell);
        }
        return $contents;
        }
    }

    ?>

沒有留言:

張貼留言