在好几个月前,我在日志
FC6下工作 中提到了自动telnet 方面的作法。当初我建议的是用expect .
在我用的这近半年中,有一个问题,就是expect 对中文的支持实在是不行。
在手工telnet 工作时,用vi打开 一个含有中文的文件 ,最多是乱码,但是一旦用expect自动登入后,你绝对不用 碰中文,一旦碰了,一定是 telnet自动退出。又得重新登入。很是不快。
直到最近两天,找到了python-pexpect组件,这个问题才得到解决。现在给出ubuntu上的安装方式:
sudo apt-get install python-pexpect
给出telnet.py程序的下载地址:
telnet.py.rar以下是程序代码:
-----------------------------------------
#!/usr/bin/python
# Filename : helloworld.py
import pexpect
import sys
def auto_telnet (ip,username,password,isspawn=1):
global ter
if isspawn ==1:
ter= pexpect.spawn('/usr/bin/telnet -8 -e^E '+ip)
else:
ter.sendline('telnet -8 -e^E '+ip)
ter.expect ('ogin:')
ter.sendline ( username )
ter.expect ('assword:')
ter.sendline ( password )
ter.sendline ('')
count=(len(sys.argv) -1 ) / 3
if count < 1:
print "error:no args "
exit()
for i in range(1, count+1) :
if i==1 :
auto_telnet(sys.argv[(i-1)*3+1],sys.argv[(i-1)*3+2],sys.argv[(i-1)*3+3],1)
else :
auto_telnet(sys.argv[(i-1)*3+1],sys.argv[(i-1)*3+2],sys.argv[(i-1)*3+3],0)
ter.interact()
-----------------------------------------
请将这个程序保存为telnet.py
加可执行权限:
chmod a+x telnet.py
登入命令:
./telnet.py ip username password
如:./telnet.py 10.222.1.2 ybtff 123456
如果你要telnet 到一台机器(ip1)的话,还要从这台机器telnet到别一台机器(IP2) 的话:这么干:
./telnet.py ip1 username1 password1 ip2 username2 password2
如:第一台的ip : 10.222.1.2 username: ffff password : 111111
第二台的IP: 10.222.1.8 username : yyyy password: 222222
就有:
./telnet.py 10.222.1.2 ffff 111111 10.222.1.8 yyyy 2222222
当然还有: ./telnet.py ip1 username1 password1 ip2 username2 password2 ip3 username3 password3
一般来说,你会经常telnet 到某些地方 ,你就可以简单写一个脚本:
里边的内容就是:
./telnet.py ip username password
这样运行这个脚本,就可以到预定的地方了。。
写这文章感触很深: 有些工具可能你觉得不好用,但一定会有更好用的,只是没有找到。
还有就是一个人在摸索中前进,其实真的很辛苦,当然也有成就感。。
大家都把自己的一些工具使用心得写写,可能会让许多人少走许多弯路。
当然 ,pexpect 能做很多自动化的工作,自动telnet 只是一个案例,你还可以用它做很多自动化的工作。