免费注册 查看新帖 |

Chinaunix

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

换了OpenSSH, 又有新问题。。。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-12-12 13:50 |只看该作者 |倒序浏览
刚才的一个问题里,一个朋友提醒我舍弃Net::SSH:erl, 改用OpenSSH
我装了OpenSSH,写了个简单的脚本,在shell下可以正常运行,得到远程机器目录下的列表。

#! /usr/bin/perl
use Net::OpenSSH;


print "Content-type:text/html\n\n";

my $ssh = Net::OpenSSH->new("systemdirector.sit.ibm.com", user => "root";
my $stdout = $ssh->capture("ls -l /";
print $stdout;


但是如果我把这个脚本用作cgi程序,从网页上调用的时候,就得不到任何返回, 这是为什么呢?是和时间有关系么?

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
2 [报告]
发表于 2012-12-12 14:02 |只看该作者
回复 1# niannian

maybe you need check with error

1. new
  my $ssh = Net::OpenSSH->new($host);
  $ssh->error and
    die "Couldn't establish SSH connection: ". $ssh->error;

2. capture
  my @ls = $ssh->capture("ls");
  $ssh->error and
    die "remote ls command failed: " . $ssh->error;
   

论坛徽章:
0
3 [报告]
发表于 2012-12-12 14:19 |只看该作者
#! /usr/bin/perl
use Net::OpenSSH;


print "Content-type:text/html\n\n";

my $ssh = Net::OpenSSH->new("systemdirector.sit.ibm.com", user => "root");
print $ssh->capture("ls /");
$ssh->error and die "remote ls command failed: " . $ssh->error;


我从一个网页上调用的这个script, 关键就是什么输出都没有。。。奇怪了。。。。

论坛徽章:
0
4 [报告]
发表于 2012-12-12 14:59 |只看该作者
执行Net::OpenSSH->new("systemdirector.sit.ibm.com", user => "root"; 后,用Data:umper打印出来$ssh的内容发现是没有权限在/var/www/cgi-bin目录下创建ctl文件,把ctl_dir加入到脚本中,
变成
my $ssh = Net::OpenSSH->new("systemdirector.sit.ibm.com", user => "root", ctl_dir => "../datafile/";
然后还是报错,再次打印发现
$VAR1 = \bless( { '_default_stdout_fh' => undef, '_vars' => {}, '_scp_cmd' => undef, '_proxy_command' => undef, '_home' => '/var/www', '_master_stdout_fh' => undef, '_port' => undef, '_login_handler' => undef, '_ssh_cmd' => 'ssh', '_default_stdin_fh' => undef, '_default_ssh_opts' => undef, '_kill_ssh_on_timeout' => undef, '_ctl_path' => '../datafile/root-systemdirector.-2579-709233', '_target_os' => 'unix', '_master_stderr_fh' => undef, '_wfm_bout' => '', '_default_stream_encoding' => undef, '_gateway_args' => undef, '_batch_mode' => undef, '_default_stderr_fh' => undef, '_master_opts' => [], '_passphrase' => undef, '_default_argument_encoding' => undef, '_error' => 'unable to establish master SSH connection: master process exited unexpectedly', '_host' => 'systemdirector.sit.ibm.com', '_key_path' => undef, '_pid' => 2580, '_user' => 'root', '_master_stderr_discard' => undef, '_master_stdout_discard' => undef, '_host_squared' => 'systemdirector.sit.ibm.com', '_thread_generation' => 0, '_ssh_opts' => [ '-l', 'root' ], '_timeout' => undef, '_error_prefix' => [], '_rsync_cmd' => 'rsync', '_external_master' => undef, '_expand_vars' => undef, '_passwd' => undef, '_perl_pid' => 2579 }, 'Net::OpenSSH' );

终于有了不一样的错误,但是这个错误'_error' => 'unable to establish master SSH connection: master process exited unexpectedly' , 我查了一下。。目前还是不知道如何fix?
我是用linux去连AIX..

论坛徽章:
42
19周年集字徽章-周
日期:2019-10-14 14:35:31平安夜徽章
日期:2015-12-26 00:06:30数据库技术版块每日发帖之星
日期:2015-12-01 06:20:002015亚冠之首尔
日期:2015-11-04 22:25:43IT运维版块每日发帖之星
日期:2015-08-17 06:20:00寅虎
日期:2014-06-04 16:25:27狮子座
日期:2014-05-12 11:00:00辰龙
日期:2013-12-20 17:07:19射手座
日期:2013-10-24 21:01:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34IT运维版块每日发帖之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之新疆
日期:2016-06-07 14:10:01
5 [报告]
发表于 2012-12-12 15:03 |只看该作者
你的path中是否包含了ssh的路径?
我都是用expect模块的。没有问题

论坛徽章:
0
6 [报告]
发表于 2012-12-12 15:07 |只看该作者
[root@httpServer cgi-bin]# ssh -V
OpenSSH_5.3p1, OpenSSL 1.0.0-fips 29 Mar 2010

我本机的openSSH已经是5.3了呀。。。为啥不行呢?

论坛徽章:
0
7 [报告]
发表于 2012-12-12 15:16 |只看该作者
本帖最后由 niannian 于 2012-12-12 15:17 编辑

my $ssh = Net::OpenSSH->new("systemdirector.sit.ibm.com", ssh_cmd => "/usr/bin/ssh", user => "root", ctl_dir => "../datafile/");
楼上的你是说这样么?
可是还是一样的错误,我在想,是不是因为从网页执行这个脚本是以apache用户的身份执行的。。所以没有权限去run /usr/bin/ssh这个命令?
但是如果是没有权限的话,apache应该报个permission denied之类的错误吧?

论坛徽章:
0
8 [报告]
发表于 2012-12-12 15:17 |只看该作者
而且,如果我单独run这个脚本(不从网页中调用),那么即使不加入ssh的路径,也是可以运行成功的。。。

论坛徽章:
42
19周年集字徽章-周
日期:2019-10-14 14:35:31平安夜徽章
日期:2015-12-26 00:06:30数据库技术版块每日发帖之星
日期:2015-12-01 06:20:002015亚冠之首尔
日期:2015-11-04 22:25:43IT运维版块每日发帖之星
日期:2015-08-17 06:20:00寅虎
日期:2014-06-04 16:25:27狮子座
日期:2014-05-12 11:00:00辰龙
日期:2013-12-20 17:07:19射手座
日期:2013-10-24 21:01:23CU十二周年纪念徽章
日期:2013-10-24 15:41:34IT运维版块每日发帖之星
日期:2016-01-27 06:20:0015-16赛季CBA联赛之新疆
日期:2016-06-07 14:10:01
9 [报告]
发表于 2012-12-12 18:23 |只看该作者
所以我怀疑是apache的运行环境变量的影响。
你可以把%ENV打出来看看
ctl_path用..这个也不太可靠。

论坛徽章:
0
10 [报告]
发表于 2012-12-13 12:33 |只看该作者
已经搞定了。。
还是和apache的运行环境有关系。我直接用脚本运行,是root身份run的。但是从网页调用,是apache用户。。而root用户已经能通过不输入密码就登录到远程机器。所以我在程序里没有写入密码
但是用apache用户登录的时候,还是要输入密码才可以。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP