1. 程式人生 > >使用python telnetlib批量備份交換機配置

使用python telnetlib批量備份交換機配置

使用了telnetlib模組,首先登入到交換機,列出並獲取配置檔案的名稱,然後通過tftp協議將配置檔案傳輸到檔案伺服器上,為避免配置檔案覆蓋,將備份的配置檔名稱統一加入日期以作區分。

1. 登入方式和口令有好幾種,比較懶惰,通過不同列表以做區分,如果每個交換機口令都不相同的話,就需要額外處理了。

2. 交換機的配置檔案也有多種型別,也是通過列表進行區分。

3. 有些交換機支援ftp和sftp,但測試發現有些雖然有相應的客戶端命令,但傳輸總有問題。也不能將每個交換機都配置為ftp伺服器,不安全也不方便。最後採用tftp解決。tftp比較簡單,沒有辦法建立目錄以區分不同日期的備份。好在配置檔案已經加入了日期做區分,馬馬虎虎可以運行了。

import telnetlib,sys

from datetime import date
today=date.today()
print(today)
ipaddrset1=['192.168.1.19','192.168.1.29','192.168.1.59']
ipaddrset2=['192.168.1.39','192.168.1.49','192.168.1.69','192.168.1.56','192.168.1.6','192.168.1.9','192.168.1.24',
           '192.168.1.72','192.168.1.73','192.168.1.74','192.168.1.75','192.168.1.76','192.168.1.41','192.168.1.16','192.168.1.32',]
ipaddrset3=['192.168.1.51','192.168.1.52','192.168.1.53','192.168.1.54','192.168.1.55',
           '192.168.1.15','192.168.1.16','192.168.1.22','192.168.1.23','192.168.1.25','192.168.1.26','192.168.1.27',
            '192.168.1.28','192.168.1.7']
hostname='192.168.8.201'
tn=telnetlib.Telnet(hostname)
print(tn.read_until(b'Username:').decode('ascii'))
tn.write(b'**********\n')
print(tn.read_until(b'Password:').decode('ascii'))
tn.write(b'************\n')
print(tn.read_until(b'>').decode('ascii'))
for ipaddr in ipaddrset1:
    telnet_dest="telnet "+ipaddr
    tn.write(telnet_dest.encode('ascii')+b'\n')
    tn.read_until(b'Password:').decode('ascii')
    tn.write(b'**********\n')
    tn.read_until(b'>').decode('ascii')
    tn.write(b'dir\n')
    tn.read_until(b'>').decode('ascii')
    fn=str(today)+"_"+str(ipaddr)+"_vrpcfg.zip \n"
    cmdli="tftp 192.168.5.33 put vrpcfg.zip " +str(fn)
    tn.write(cmdli.ede('ascii'))
    tmp=tn.read_until(b'>').decode('ascii')
    if "successfully" in tmp:
        print(str(ipaddr)+"  backup successfully!")
    else:
        print(str(ipaddr)+"  backup  NOT successfully!")
    tn.write(b'quit\n')
    tn.read_until(b'>')
for ipaddr in ipaddrset2:
    telnet_dest="telnet "+ipaddr
    tn.write(telnet_dest.encode('ascii')+b'\n')
    tn.read_until(b'Password:').decode('ascii')
    tn.write(b'**********\n')
    tn.read_until(b'>').decode('ascii')
    tn.write(b'dir\n')
    tn.read_until(b'>').decode('ascii')
    fn=str(today)+"_"+str(ipaddr)+"_startup.cfg \n"
    cmdli="tftp 192.168.5.33 put startup.cfg " +str(fn)
    tn.write(cmdli.encode('ascii'))
    tmp=tn.read_until(b'>').decode('ascii')
    if "successfully" in tmp:
        print(str(ipaddr)+"  backup successfully!")
    else:
        print(str(ipaddr)+"  backup  NOT successfully!")
    tn.write(b'quit\n')
    tn.read_until(b'>')
for ipaddr in ipaddrset3:
    telnet_dest="telnet "+ipaddr
    tn.write(telnet_dest.encode('ascii')+b'\n')
    tn.read_until(b'Password:').decode('ascii')
    tn.write(b'************\n')
    tn.read_until(b'>').decode('ascii')
    tn.write(b'dir\n')
    tn.read_until(b'>').decode('ascii')
    fn=str(today)+"_"+str(ipaddr)+"_startup.cfg \n"
    cmdli="tftp 192.168.5.33 put startup.cfg " +str(fn)
    tn.write(cmdli.encode('ascii'))
    tmp=tn.read_until(b'>').decode('ascii')
    if "successfully" in tmp:
        print(str(ipaddr)+"  backup successfully!")
    else:
        print(str(ipaddr)+"  backup  NOT successfully!")
    tn.write(b'quit\n')
    tn.read_until(b'>')

tn.write(b'exit\n')
tn.close()