[python]使用gevent實現並行登入路由器
阿新 • • 發佈:2019-02-13
python內建了telnetlib模組,這點比perl強不少。
更好的是,利用gevent的猴子補丁,可以很容易地實現基於協程的並行登入。
很多比較老的裝置,路由器交換機仍然只支援telnet,用這種方式可以方便地登入。#!/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)
不過很多比較新的裝置和主機,都只支援ssh登入了,又如何處理呢?
很遺憾啊,paramiko+gevent monkey是不行的。
這個咱們以後再說。