PHP调用php_ssh实现远程登陆并执行shell脚本

  •   
  • 18033
  • Linux
  • 0
  • super_dodo
  • 2013/09/11

简单看了一下Linux的shell脚本,对Shell有了简单的了解(刚入门),故而想实现一个小功能,就是通过php脚本WEB端去链接Linux服务器,并调用Linux上面的脚本,传入参数执行简单的脚本,返回值。

Step1.需要安装php_ssh2组件的支持,各版本不一,烦请各位找到自己版本兼容的组件php_ssh2.dll,拷贝到php组件目录ext下,修改php.ini文件打开php_ssh2.dll的支持。打开phpinfo页面查看该组件是否已开启正常(安装php组件会有新的篇幅介绍).

Step2.在Linux下编写shell脚本,执行并测试.(dodo写了个简单的输入两个数实现相乘并返回值,很简陋)

#!bin/bash
#Program
#DoDoBook V2013-08-19
sum=$(($1*$2))
echo -e "The result of $1 x $2 is ==> $sum"

Step3.真正的操作在PHP里面,直接贴代码,细细品味!!

<?php
	// 通过SSH登录远程主机,实现远程执行shell的功能。
	header('Content-Type:text/html;charset=UTF-8');	
	
	define('SSH_USER', 'root');					//登陆LINUX的用户名
	define('SSH_PWD', '******');					//登陆LINUX的密码
	define('SSH_PORT', 22);						//登陆LINUX的端口--SSH默认端口22
	define('SSH_HOST', '192.168.2.41');			//登陆LINUX的IP地址(虚拟机)

	if(!function_exists("ssh2_connect")){
	    exit('SSH扩展没有安装或者没有安装成功');
	}

	//使用SSH2进行连接
	$ssh2 = ssh2_connect(SSH_HOST, SSH_PORT);
	if(!$ssh2){
	    exit('服务器连接不上???');
	}else{
		echo '已经成功连接上了服务器!!!<hr>';
	}

	// 验证用户名和密码
	ssh2_auth_password( $ssh2, SSH_USER, SSH_PWD );

	if(@$_POST['submit']){		//表单提交了值
		$a = $_POST['numA'] ? $_POST['numA'] : 4 ;
		$b = $_POST['numB'] ? $_POST['numB'] : 5 ;
		$command = "sh sh_sum.sh {$a} {$b};pwd;ls;";
	}else{                        //表单未提交值
		$command = 'pwd;whoami;ls -l;';	
	}

	$stream = ssh2_exec($ssh2, $command);		
	$errorStream = ssh2_fetch_stream($stream, SSH2_STREAM_STDERR);
	
	//阻塞模式--延伸阅读:http://blog.csdn.net/linvo/article/details/5466046
	//关于文件流的阻塞与非阻塞模式
	stream_set_blocking($stream, true);
	stream_set_blocking($errorStream, true);

	//stream_get_contents类似于file_get_contents
	$cmd = stream_get_contents( $stream );
	$errorInfo = stream_get_contents( $errorStream );

	fclose( $stream );
	fclose( $errorStream );
	print_r( $cmd );		//执行脚本后的返回正确的信息
	echo '<hr>';
	var_dump( $errorInfo );	//返回脚本错误的信息
?>

<form action="#" method="post">
	数值1 <input type="text" name="numA"><br>
	数值2 <input type="text" name="numB"><br>
	<input type="submit" name="submit" value="提交">
</form>

看明白的请举手,没看明白的再看几遍!!!