perl实现远程执行程序的经验
首先要安装telnet和telnet-server一、检测telnet-server的rpm包是否安装
OS:RedHat9
#rpm -qa telnet-server
//出于安全考虑telnet-server.rpm是默认没有安装的,而telnet的客户端是标配。即下面的软件是默认安装的,为了方便测试,也确认一下//
#rpm -qa telnet
telnet-0.17-25
如果没有安装,请安装telnet-server
第3张盘上有telnet-server-0.17-25.i386.rpm,进入Server目录下执行
#rpm -ivh telnet-server*.i386.rpm
二、重新启动xinetd守护进程
由于telnet服务也是由xinetd守护的,所以安装完telnet-server,要启动telnet服务就必须重新启动xinetd
#service xinetd restart
三、测试一下
我们先来查看TCP的23端口是否开启正常
#netstat -tnl |grep 23
tcp 0 0 0.0.0.0:23 0.0.0.0:* LISTEN
如果上面的一行存在就说明服务已经运行了
这时我们可以本机通过进一步确认一下
# telnet localhost 23
Trying telnet 127.0.0.1…
Connected to localhost.localdomain (127.0.0.1)..
Escape character is ‘^]’.
Red Hat Linux> Kernel 2.4.20-8 on an i686
login:
如果netstat命令没有返回内容,我们就只好继续进行更深入的配置了。
四、排除可能出现的问题
修改telnet服务配置文件
vi /etc/xinetd.d/telnet
service telnet
{
disable = yes
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.telnetd
log_on_failure += USERID
}
将disable=yes行前加#注释掉,或者把yes改为no,之后重新启动xinetd扩展守护进程
# service xinetd restart
停止 xinetd: [确定]
启动 xinetd: [确定]
注意关闭系统防火墙对23端口的限制。
# system-config-securitylevel
在这里我们可以开启或关闭防火墙,也可以配置防火墙
或者:
# setup
然后编写perl的远程调用代码:
#!/usr/bin/perl -w
use strict;
use warnings;
use Net::Telnet;
my $prompt = '/> ?$|? ?$|$ ?$|> ?$|% +$|hp)s*$/'; #pattern
my $tnet=new Net::Telnet('Host'=>'192.168.1.5','Timeout'=>1, 'Prompt'=>$prompt);
##上面有IP地址,Timeout起码为1,不然会立即终止!
$tnet->waitfor('Match'=>"/login:/");
$tnet->print("ss");##登陆名称
$tnet->waitfor('Match'=>"/Password:/");
$tnet->print("123456");##登陆密码
$tnet->waitfor($prompt);
$tnet->cmd("sh s.sh");##执行命令
$tnet->close();
如果远端这个用户已经登陆 就会造成读取失败
页:
[1]