python内置了telnetlib模块,这点比perl强不少。
更好的是,利用gevent的猴子补丁,可以很容易地实现基于协程的并行登录。
#!/bin/env python
#encoding=utf-8
import gevent
from gevent import monkey
monkey.patch_all()
#创建函数
def do_telnet(Host, username, password, finish, commands):
import telnetlib
'''''Telnet远程登录:Windows客户端连接Linux服务器'''
# 连接Telnet服务器
try:
tn = telnetlib.Telnet(Host, port=23, timeout=10)
except:
print "%s login fail" % (Host)
return
#tn.set_debuglevel(2)
# 输入登录用户名
tn.read_until('sername: ')
tn.write(username + '\n')
# 输入登录密码
tn.read_until('assword: ')
tn.write(password + '\n')
# 登录完毕后执行命令
ret=tn.read_until(finish)
print "%s login ok %s" % (Host,ret)
for command in commands:
tn.write('%s\n' % command)
#执行完毕后,终止Telnet连接(或输入exit退出)
ret=tn.read_until(finish,5)
print ret
tn.close() # tn.write('exit\n')
if __name__=='__main__':
# 配置选项
Host=['192.168.6.87','192.168.6.26','192.168.6.87'] # Telnet服务器IP
username = 'aaa' # 登录用户名
password = 'aaa' # 登录密码
prompt = '#' # 命令提示符
commands = [['ping 192.168.6.26'],['ping 192.168.6.45'],['ping 192.168.6.150']]
#do_telnet(Host[0], username, password, prompt, commands[0])
#创建协程
nodes = []
for i in xrange(0,3):
nodes.append(gevent.spawn(do_telnet, Host[i], username, password, prompt, commands[i]))
#开始运行
gevent.joinall(nodes)
很多比较老的设备,路由器交换机仍然只支持telnet,用这种方式可以方便地登录。
不过很多比较新的设备和主机,都只支持ssh登录了,又如何处理呢?
很遗憾啊,paramiko+gevent monkey是不行的。
这个咱们以后再说。