jiabanl 发表于 2018-8-31 08:09:14

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]
查看完整版本: perl实现远程执行程序的经验