免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: chinaunixzcx
打印 上一主题 下一主题

【已解决】使用ssh2_exec执行远程机器命令无法获取执行结果 [复制链接]

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
11 [报告]
发表于 2009-09-07 23:12 |只看该作者
我测试的结果完全正常。
要不你在最开始加上:
ini_set('display_errors', true);
ini_set('error_reporting', E_ALL);

论坛徽章:
0
12 [报告]
发表于 2009-09-08 08:58 |只看该作者
你代码中的www.superserver.com 是局域网内的一台机器还是远程的主机,我在局域网测试也没有问题,但是在广域网的远程主机是就无法获取到结果。

论坛徽章:
0
13 [报告]
发表于 2009-09-08 09:39 |只看该作者
外网 sleep()  ,直到返回

论坛徽章:
0
14 [报告]
发表于 2009-09-08 13:43 |只看该作者
查了一些资料最终用如下方法解决了,跟大家分享一下:

  1. <?php
  2. function user_exec($shell, $cmd, $max_time)
  3. {
  4.         $InputCmd = "echo \"[START]\";".$cmd."echo \"[END]\";";
  5.         fwrite($shell,$InputCmd."\n");
  6.         $output = "";
  7.         $start = false;
  8.         $start_time = time();
  9.         while(((time()-$start_time) < $max_time))
  10.         {
  11.                 $line = fgets($shell);
  12.                 if(!strstr($line,$InputCmd) && !preg_match('/echo/',$line) && !preg_match('/\"\[START\]\"/',$line) && !preg_match('/\"\[END\]\"/',$line))
  13.                 {
  14.                         if(preg_match('/\[START\]/',$line))
  15.                         {
  16.                                 //echo $line."==1<br>";
  17.                                 $start = true;
  18.                         }
  19.                         elseif(preg_match('/\[END\]/',$line))
  20.                         {
  21.                                 //echo $line."==2<br>";
  22.                                 return $output;
  23.                         }
  24.                         elseif($start)
  25.                         {
  26.                                 $output[] = $line;
  27.                                 //$output .= $line;
  28.                         }
  29.                 }
  30.         }
  31. }

  32. $SSH_Connect = ssh2_connect($MyHost,22);
  33. if ( !$SSH_Connect )
  34. {
  35.         echo "连接 [".$MyHost."] 失败!<br>";
  36.         exit(1);
  37. }
  38. $Ret=ssh2_auth_password($SSH_Connect,user,pass);
  39. if(!$Ret)
  40. {
  41.         echo "认证失败[".$MyHost."]!<br>";
  42.         exit(1);
  43. }
  44. if(!($shell = ssh2_shell($SSH_Connect, 'bash')))
  45. {
  46.         echo "fail: unable to establish shell<br>";
  47.         exit(1);
  48. }
  49. else
  50. {
  51.         $ReturnValue = user_exec($shell, $CMD, 5);
  52.         if($ReturnValue == "")
  53.         {
  54.                 $ResultString="无信息";
  55.         }
  56.         else
  57.         {
  58.                 $Num = sizeof($ReturnValue);
  59.                 for($i=0; $i<$Num; $i++)
  60.                 {
  61.                         $ResultString .= $ReturnValue[$i];
  62.                 }
  63.         }
  64.         echo $ResultString."<br>";
  65. }
  66. ?>
复制代码

[ 本帖最后由 chinaunixzcx 于 2009-9-8 13:48 编辑 ]

论坛徽章:
1
技术图书徽章
日期:2013-12-05 23:25:45
15 [报告]
发表于 2009-09-08 13:54 |只看该作者
我的测试时远程的,freebsd服务器端。

论坛徽章:
0
16 [报告]
发表于 2009-09-08 15:17 |只看该作者
原帖由 chinaunixzcx 于 2009-9-8 13:43 发表
查了一些资料最终用如下方法解决了,跟大家分享一下:





这手册上不就有了吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP