首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | 镜像站
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
搜索中心 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>网络管理>linux服务器>正文

Linux下自动telnet到远程主机上运行的脚本

http://www.oklinux.cn  2008-08-06  OKLinux   会员收藏  游客收藏  【 】 
您查看的文章来源于http://www.oklinux.cn

用例:自动测试系统,自动编译完成后,需要能够自动在终端上运行,终端仅支持串口和telnet控制,其中telnet是比较理想的选择,只需要telnet过去后,自动完成交互的过程即可。

方案:后台运行telnet,将标准输入重定向到管道,然后往管道中发交互命令。(管道的相关内容抽空看一下,必要的时候补篇文章)

补充:虽然到的本例直接用shell脚本完成,但感觉主要内容在于telnet后台运行及管道,如有必要使用其它脚本比如最近在玩的lua等也可以实现,当然了,需要用到一些exec。

脚本:
#===========autotelnet.sh==============
#!/bin/bash

tmptty=`tty` #取得当前的tty值
tmptty=`basename $tmptty` #去掉tty的绝对路径
tmpname=`whoami` #取得当前执行程序的用户名
ip="10.22.33.44" #目标主机地址
inp1="ABC^M" #主机的用户名,注意^M必须在UNIX下用以下方法输入才能用!!(VI下测试OK)
#方法为按住ctrl键按v键,不放ctrl键,再按shift键和m键,完成后全部放开
inp2="ABC^M" #主机的密码,注意必须有^M
inp3="ls^M" #其他进入后的命令,可无或用ls之类的命令代替,注意必须有^M
inp4="pwd^M" #命令4,同上
#--------------------------

inputfile=in #导入文件管道用的,不要改,这个值没有任何关系
outputfile=out.log #最终导出的文件
rm -fr $inputfile
rm -fr $outputfile
mknod $inputfile p
touch $outputfile

#file description 7 for out and 8 for in 使用7作为输入管道,8作为输入
exec 7<>$outputfile
exec 8<>$inputfile

#这句是关键,注意对于标准输入标准输出的重定向,和后台运行的&,以方便在后面
telnet $ip <&8 >&7 &

sleep 2; echo $inp1 >> $inputfile #等2秒,然后把inp1,也就是用户名 回车换行输入到输入管道
sleep 2; echo $inp2 >> $inputfile
sleep 2; echo $inp3 >> $inputfile #如果没有其他命令,这行和下一行可以去掉
sleep 2; echo $inp4 >> $inputfile

tail -f $outputfile & #强制在屏幕上显示任何输入输出

#正常情况下已经进入目标主机了,可以输入任何命令,所有的一切输入输出都会被记录
#以下这一段根据实际需要进行修改,如本用例中可进行等待某些事件后退出,不需要进行读入
while true
do
read str #读入一行
if [[ $str = "quit" || $str = "exit" ]]
#在远程执行这一行
then echo $str >> $inputfile exit
else echo $str >> $inputfile
fi
done

#退出时自动杀掉相关进程
ps -ef | grep telnet | grep -v grep | grep -v telnetd | grep $tmptty | grep $tmpname | awk '{print " kill -9", $2}' | sh
ps -ef | grep tail | grep -v grep | grep -v telnetd | grep $tmptty | grep $tmpname | awk '{print " kill -9", $2}' | sh
#=====================脚本结束===================


上一篇:解决:/usr/bin/ld: cannot find -lltdl   下一篇:Linux下为什么0777的文件夹和文件apache无法写入呢

收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·解决:/usr/bin/ld: cannot find -lltdl
·Linux下为什么0777的文件夹和文件apache无法写入呢
·Ubuntu下安装Zend Optimizer
·非固定IP在Ubuntu上架NAT DHCP
·Fedora下Apache设置
·Linux修改iptables,取消8080的访问限制
·在Linux下使用远程拷贝命令scp时去掉密码提示的方法
·Linux系统下raw设备的创建及使用
·在红旗Linux中的ftp实验配置过程
·Linux下用mail发带附件的邮件
·在红旗Linux中的E-MAIL服务器(postfix及dovecot)配
·Linux索引节点(inode)用满导致的一次故障及解决
·轻量型WEB服务器boa的交叉编译
·基于Linux操作系统的三层交换机
·Linux网络参数基本设置
·Linux下蓝牙服务端程序
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·Linux下为什么0777的文件夹和文件apach
·解决:/usr/bin/ld: cannot find -lltd
·Ubuntu下安装Zend Optimizer
·非固定IP在Ubuntu上架NAT DHCP
·Fedora下Apache设置
·Linux修改iptables,取消8080的访问限
·在Linux下使用远程拷贝命令scp时去掉密
·Linux系统下raw设备的创建及使用
·在红旗Linux中的ftp实验配置过程
·Linux下用mail发带附件的邮件
·在红旗Linux中的E-MAIL服务器(postfix
·Linux索引节点(inode)用满导致的一次故
  阅读排行
·详解远程SHELL下安装配置RedHat ES 5的
·安装大型Linux集群(4):节点安装和 GPFS
·Linux服务器存储空间巧妙管理
·LVS集群学习笔记(NAT\DR\IP tunnel)
·安装大型Linux集群(1): 简介和硬件配置
·Xen和虚拟化技术学习指南
·Linux系统邮件服务器常见错误报告列表
·安装大型Linux集群(3):存储和共享文件
·安装大型Linux集群(2):配置管理服务器
·在Linux上用LVS搭建负载均衡的集群服务
·RedHat Linux AS4 LAMP经典网站搭建实
·linux下文件服务Vsftp详细介绍
·在AS4上架设QMAIL+反病毒垃圾模块的方
·Linux操作系统下SVN服务器的搭建详解
·基于Linux的集群环境构建过程
网摘收藏: