红联Linux门户
Linux帮助

在Ubuntu下PHP的使用ssh2扩展开发web

发布时间:2016-06-18 15:15:40来源:linux网站作者:newpoyang2015

在php下使用shell去开发web管理Ubuntu系统其实并不难,按照一般步骤就可以了,不过要注意2个坑。

1.首先安装ssh扩展

apt-get install libssh2-1-dev libssh2-php

php -m |grep  ssh2 查看ssh2是否安装成功

service apache2 restart

2.编写代码测试

<?php 
$connection = ssh2_connect( '127.0.0.1', 22 ); 
if ( ssh2_auth_password( $connection, 'newpo', '123456' ) ) { 
echo '登陆成功!<br>'; 

else{ 
echo '登陆失败<br>'; 
return; 

?> 

运行后输出以下内容,表示成功。

登陆成功!


现在开始要注意下面2个坑:

1.ssh2扩展使用shell命令与用户权限有关:

通常用安装系统创建的用户使用shell命令,在ssh里面都会提示输密码,因为他还不是root权限;ssh2扩展执行没有报错误,但root权限的shell都无法使用

$connection = ssh2_connect( '127.0.0.1', 22 ); 
if ( ssh2_auth_password( $connection, 'newpo', '123456' ) ) { 
echo '登陆成功!<br>'; 

else{ 
echo '登陆失败<br>'; 
return; 

$stream = ssh2_exec($connection, "service smbd restart"); 
stream_set_blocking( $stream, true );  
echo "Output: " . stream_get_contents($stream);  

我之前想过在Service smbd restart先执行sudo -i,然后输入密码,但是发现这种方法也是不行,根本就不出现输入密码提示。

最后想到一种办法就是以root身份登录,ssh2扩展就不会受到权限限制,不过Ubuntu本身root是没有密码,需要手动把root密码加上,执行passwd root,输入2次密码即可,设置好后修改登录代码在执行出现下面即可

$connection = ssh2_connect( '127.0.0.1', 22 ); 
if ( ssh2_auth_password( $connection, 'root', '123456' ) ) { 
echo '登陆成功!<br>'; 

else{ 
echo '登陆失败<br>'; 
return; 

$stream = ssh2_exec($connection, "service smbd restart"); 
stream_set_blocking( $stream, true );  
echo "Output: " . stream_get_contents($stream);  

登陆成功!

Output: smbd stop/waiting smbd start/running, process 24734


2.如果解决ssh扩展获取不了刷屏命令(如top)的信息和执行shell独占web资源

用web控制Ubuntu,最常见的功能就是获取系统的cpu占有率,内存等等,就使用top命令

$stream = ssh2_exec($connection, "top"); 
stream_set_blocking( $stream, true );  
echo "Output: " . stream_get_contents($stream);  

web打开什么信息都没有获取到(暂时不知道原因),网上提供了另一些方式取这信息

$stream = ssh2_exec($connection, "top -b -n 2 | grep -E '(Mem)|(Cpu)'"); 
stream_set_blocking( $stream, true );  
echo "Output: " . stream_get_contents($stream);  

如果执行,可以获取信息,只是web会等待几秒才可以获取到信息

解决上面情况有2种方法:

1.使用多线程php扩展或第3方扩展swoole等,需要编译php,所以没有去尝试,有空试一下

2.系统里面写一个脚本不断获取cpu和内存的信息,ssh执行这个脚本即可


本文永久更新地址:http://www.linuxdiyf.com/linux/21627.html