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');  
}
复制代码

密钥生成方式:

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

  

3.远程copy文件

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

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

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

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

本地文件copy到远程服务器

bool ssh2_scp_send ( resource session,stringlocal_file, string remotefile[,intcreate_mode] )

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

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

 

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

resource ssh2_exec( resource session,stringcommand [, string pty[,arrayenv [, int width[,intheight [, 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:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?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/>"

  

 

posted @   X-Wolf  阅读(968)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)
 
点击右上角即可分享
微信分享提示
杭州
18:04发布
杭州
18:04发布
4°
西南风
2级
空气质量
相对湿度
87%
今天
多云 / 小雨
4°/13°
周三
多云 / 晴
8°/19°
周四
多云
11°/24°