PHP模塊之ssh2


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/>";  

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM