perl實現遠程執行程序的經驗

 首先要安裝telnet和telnet-server

 

一、檢測telnet-server的rpm包是否安裝

OS:RedHat9

[root@locahost ~]#rpm -qa telnet-server

//出於安全考慮telnet-server.rpm是默認沒有安裝的,而telnet的客戶端是標配。即下面的軟件是默認安裝的,爲了方便測試,也確認一下//

[root@locahost ~]#rpm -qa telnet

telnet-0.17-25

如果沒有安裝,請安裝telnet-server

第3張盤上有telnet-server-0.17-25.i386.rpm,進入Server目錄下執行

[root@locahost ~]#rpm -ivh telnet-server*.i386.rpm

二、重新啓動xinetd守護進程

由於telnet服務也是由xinetd守護的,所以安裝完telnet-server,要啓動telnet服務就必須重新啓動xinetd

[root@locahost ~]#service xinetd restart

三、測試一下

我們先來查看TCP的23端口是否開啓正常

[root@locahost ~]#netstat -tnl |grep 23

tcp 0 0 0.0.0.0:23 0.0.0.0:* LISTEN

如果上面的一行存在就說明服務已經運行了

這時我們可以本機通過進一步確認一下

[root@locahost ~]# telnet localhost 23

Trying telnet 127.0.0.1…

Connected to localhost.localdomain (127.0.0.1)..

Escape character is ‘^]’.

Red Hat Linux release 9 (Shrike)

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擴展守護進程

[root@localhost ~]# service xinetd restart

停止 xinetd: [確定]

啓動 xinetd: [確定]

注意關閉系統防火牆對23端口的限制。

[root@localhost ~]# system-config-securitylevel

在這裏我們可以開啓或關閉防火牆,也可以配置防火牆

或者:

[root@locahost ~]# 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();

 

如果遠端這個用戶已經登陸 就會造成讀取失敗

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章