• PHP模块之ssh2 X


    php远程copy文件以及在远程服务器中执行命令时,所用到的模块是ssh2,以后所有的操作都依据ssh2连接句柄完成。

    libssh: https://www.libssh2.org/

    ssh2: https://pecl.php.net/package/ssh2

    [安装]

    wget  http://www.libssh2.org/download/libssh2-1.4.2.tar.gz  
    tar zxf libssh2-1.4.2.tar.gz  
    cd libssh2-1.4.2  
    ./configure && make && make install  
    
    wget  https://pecl.php.net/get/ssh2-1.1.2.tgz
    cd ssh2-0.11.3  
    phpize   
    ./configure —with-ssh2 && make && make install  

    ubuntu安装:

    apt-get install libssh2-1-dev libssh2-php  
    
    会直接安装, 不需要修改PHP配置信息

    [修改配置文件]

    cd  /etc/php5/cli  
    vim  php.ini  
    添加项:extension=/usr/lib/php5/20090626/ssh2.so  
    ssh2.so是编译ssh2时得到的模块,上面是模块的位置。  

    查看是否加载了ssh2

    php -m|grep ssh2
    ssh2

    [使用]

    SSH2连接有两种方式,分别是用户名密码,ssh密钥形式。

    1.用户名和密码

    $connection = ssh2_connect("192.168.6.222",22);  
    if (ssh2_auth_password($connection,"veno","ubuntu"))  
    {  
             echo "Authentication Successful! ";  
    }else{  
             die("Authentication Failed...");  
    } 

    2.ssh密钥

    v$connection = ssh2_connect('192.168.6.222', 22, array('hostkey'=>'ssh-rsa'));  
    if (ssh2_auth_pubkey_file($connection, 'root',  
                              '/root/.ssh/id_rsa.pub',  
                              '/root/.ssh/id_rsa'))  
    {  
       echo "Public Key Authentication Successful\n";  
    } else {  
         echo ('Public Key Authentication Failed');  
    }

    密钥生成方式:

    ssh-keygen -t rsa
    
    生成后的公钥:  ~/.ssh/id_rsa.pub
    
    然后使用ssh-copy-id的方式添加到需要免密登录的服务器上
    

      

    3.远程copy文件

    远程服务器文件copy到本地:

    bool ssh2_scp_recv ( resource $session, string $remote_file, string $local_file )

    Ps: 接收文件时,后面文件名可以为空,如:

    ssh2_scp_recv($connection, '/home/xiaozl/veno1.exe', '/home/xiaozl/')  

    本地文件copy到远程服务器

    bool ssh2_scp_send ( resource $session, string $local_file, string $remote_file [, int $create_mode] )

    Ps:发送文件时,后面的文件名不能为空,如:

    ssh2_scp_send($connection, '/home/xiaozl/package.xml', '/home/xiaozl/package.xml');  

    4.执行远程服务器上的命令并取返回值

    resource ssh2_exec( resource $session, string $command [, string $pty [, array $env [, int $width [, int $height [, int $width_height_type]]]]] )

    在229上面执行222上的命令具体实例:

    $tcmd="cd /home/veno/gateway/radiusclient;";  
    $tcmd.="./nastool.sh get-status app=2b1c5364-db39-c76d-842c-11d4a81d555d";  
    $stream = ssh2_exec($connection, $tcmd);  
    stream_set_blocking($stream,true);  
    echo stream_get_contents($stream);   
    ssh2_exec() 是会有返回值的,而它的返回值是无格式的(无换行),但它是以stream(流的形式返回),
     
    显示出来,可这样进行流处理:
     
    stream_set_blocking($stream, true);
     
    echo :stream_get_contents($stream);

    DEMO:

    <?php  
    echo "是访问到这里来了";  
    $connection = ssh2_connect('192.168.6.222', 22, array('hostkey'=>'ssh-rsa'));  
    if (ssh2_auth_pubkey_file($connection, 'root',  
                              '/root/.ssh/id_rsa.pub',  
                              '/root/.ssh/id_rsa'))  
    {  
      echo "Public Key Authentication Successful\n";  
      //$flag=ssh2_scp_recv($connection, '/home/xiaozl/veno1.exe', '/home/xiaozl/');  
      //接收时,后面文件名可以为空  
      //$flag=ssh2_scp_send($connection, '/home/xiaozl/package.xml', '/home/xiaozl/package.xml');  
      //发送时,后面的文件名不能为空  
      //echo $flag;  
      $tcmd="cd /home/veno/gateway/radiusclient;";  
      $tcmd.="./nastool.sh get-status app=2b1c5364-db39-c76d-842c-11d4a81d555d";  
      $stream = ssh2_exec($connection, $tcmd);  
      stream_set_blocking($stream,true);  
      echo stream_get_contents($stream);   
    } else {  
      echo ('Public Key Authentication Failed');  
    }  
    echo "<br/>";  
    $connection = ssh2_connect('192.168.6.222', 22);  
    ssh2_auth_password($connection, 'veno', '*******');  
    $tcmd="cd /home/veno/gateway/radiusclient;";  
      $tcmd.="./nastool.sh get-status app=2b1c5364-db39-c76d-842c-11d4a81d555d";  
      $stream = ssh2_exec($connection, $tcmd);  
      echo "<br/>";  
      echo "-----------------------------------------------";  
      stream_set_blocking($stream,true);  
      echo stream_get_contents($stream);   
      echo "-----------------------------------------------";  
    echo "<br/>";  
    

      

  • 相关阅读:
    别让你的生活止于平庸!(摘)
    NSURLSession 请求
    第三方原理
    iOS实用的小技巧
    简书APP
    网络请求
    JQuery 简介
    struts2拦截器的实现原理及源码剖析
    hibernate配置文件注意点
    hibernate中三种状态
  • 原文地址:https://www.cnblogs.com/xingxia/p/php_ssh2.html
Copyright © 2020-2023  润新知