免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2514 | 回复: 9
打印 上一主题 下一主题

Net::SSH::Perl 有点问题请教高手 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-11-20 00:57 |只看该作者 |倒序浏览
perl脚本如下:
  1. #!/usr/bin/perl -w

  2. use Net::SSH::Perl;

  3. my $user = 'root';
  4. my $pass = "123456";
  5. my $host = "1.1.1.5";
  6. my $cmd = "ls";

  7. my %params = (
  8.         port => "22",
  9. );

  10. my $ssh = Net::SSH::Perl->new($host, %params);
  11. $ssh->login($user, $pass);
  12. my($stdout, $stderr, $exit) = $ssh->cmd($cmd);
  13. print "$stdout";
复制代码
这个脚本我手动执行是没有问题的.



但是我的想写一个php页面来调用这个脚本.
我的方式是用pecl
php代码如下:
  1. <?php

  2.   $perl = new Perl();

  3.   $perl->require('exec/restart-vsftpd.pl');

  4. ?>
复制代码
在命令行执行:
manager]# php -e manager.php         
PHP Fatal error:  Uncaught exception 'PerlException' with message '[perl] require error: an attempt to getarg from a stale io handle at /usr/lib/perl5/site_perl/5.8.8/Net/SSH/Perl/SSH2.pm line 27.
Compilation failed in require at (eval 1) line 1.
' in /var/www/html/manager/manager.php:5
Stack trace:
#0 /var/www/html/manager/manager.php(5): Perl->require('exec/restart-vs...')
#1 {main}
  thrown in /var/www/html/manager/manager.php on line 5


在页面执行:apache 的error日志内容如下:
[Sat Nov 20 00:57:08 2010] [error] [client 192.168.18.234] PHP Fatal error:  Uncaught exception 'PerlException' with message '[perl] require error: an attempt to getarg from a stale io handle at /usr/lib/perl5/site_perl/5.8.8/Net/SSH/Perl/SSH2.pm line 27.\nCompilation failed in require at (eval 1) line 1.\n' in /var/www/html/manager/manager.php:5\nStack trace:\n#0 /var/www/html/manager/manager.php(5): Perl->require('exec/restart-vs...')\n#1 {main}\n  thrown in /var/www/html/manager/manager.php on line 5



不知道哪位大侠可以帮我分析下.指点指点.

论坛徽章:
0
2 [报告]
发表于 2010-11-20 15:28 |只看该作者
有没有高人可以指点下啊.

这个问题弄得我很郁闷啊.

昨晚查到凌晨4 5点都没有搞定.

论坛徽章:
46
15-16赛季CBA联赛之四川
日期:2018-03-27 11:59:132015年亚洲杯之沙特阿拉伯
日期:2015-04-11 17:31:45天蝎座
日期:2015-03-25 16:56:49双鱼座
日期:2015-03-25 16:56:30摩羯座
日期:2015-03-25 16:56:09巳蛇
日期:2015-03-25 16:55:30卯兔
日期:2015-03-25 16:54:29子鼠
日期:2015-03-25 16:53:59申猴
日期:2015-03-25 16:53:29寅虎
日期:2015-03-25 16:52:29羊年新春福章
日期:2015-03-25 16:51:212015亚冠之布里斯班狮吼
日期:2015-07-13 10:44:56
3 [报告]
发表于 2010-11-20 15:53 |只看该作者
既然你手动执行没问题那就不应该是 perl 的问题吧?

'exec/restart-vsftpd.pl' 是不是要加上 './' 不懂 php

论坛徽章:
0
4 [报告]
发表于 2010-11-20 16:09 |只看该作者
不是这个问题.因为我写了另外一个perl脚本.
使用的Net::SSH::Expect模块.可以正常执行.只是速度真不行.(页面也没有问题)

我现在怀疑是[perl] require error: an attempt to getarg from a stale io handle at /usr/lib/perl5/site_perl/5.8.8/Net/SSH/Perl/SSH2.pm line 27.

这个问题.是不是 /usr/lib/perl5/site_perl/5.8.8/Net/SSH/Perl/SSH2.pm 模块有问题.
但是我的功力不够.看源代码看不太明白.

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
5 [报告]
发表于 2010-11-20 19:33 |只看该作者
本帖最后由 flw 于 2010-11-20 19:43 编辑

还是老观点,不会 C 语言,学这些 Perl、PHP 到一定程度都会遇到这种瓶颈。

你这个问题必须精通 Perl、PHP、C 三种语言才可以解决。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2010-11-20 19:35 |只看该作者
你倒是可以看看 /usr/lib/perl5/site_perl/5.8.8/Net/SSH/Perl/SSH2.pm line 27 是什么东西。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
7 [报告]
发表于 2010-11-20 19:42 |只看该作者
我建议直接走 IPC 好了。

论坛徽章:
0
8 [报告]
发表于 2010-11-20 20:47 |只看该作者
回复 6# flw

你说的这个我已经去看过了.

实际上就cmd函数,大概看了下,也没有发现什么问题.
手动执行可以.我就不明白为什么.

你说的IPC是指进程间通信吗?
但是我这是网络远程连接.是不是用socket更好些?
我一直有个想法.就是远程服务器端起个端口.
控制端起个端口.
控制端传个字符串到远程.远程把这个字符串当系统命令执行.这样来控制远程服务器.

你觉得是否可行?

以前自己也就是用perl写写脚本.还没有真正写过这种网络的东西.还要需要高手多多指点.

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
9 [报告]
发表于 2010-11-20 22:25 |只看该作者
socket 当然也可以。
但工作量稍大些。

简单的办法就是把你的 Perl 程序和 PHP 程序之间用 IPC 连接起来。
比如命名管道或者消息队列一类的。

论坛徽章:
0
10 [报告]
发表于 2010-11-20 23:33 |只看该作者
哦.明白你的意思了.
谢谢.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP