python备份cisco交换机_Python备份Cisco交换机配置 | CN-SEC 中文网
最近幫同事寫一段關于導出cisco交換機的腳本,發現網上的資料不是太多,僅有的幾個也有不少錯誤,這里分享一個python操作cisco交換機的庫。
經過對網上的資料查找,發現如下幾個庫,吐槽一下百度搜索引擎,搜索結果太一般了,求谷歌回歸。
1、ciscolib 這個庫使用方便,比較簡潔,但是好像官方沒有收錄,需要自行安裝。
安裝方法:
下載,解壓,然后使用python setup.py install安裝。
使用方法(官方文檔):
import ciscolib
switch = ciscolib.Device("hostname or ip", "login password", "optional login username")
switch.connect() # Defaults to port 23
# There are some helper commands for common tasks
print(switch.get_model())
print(switch.get_ios_version())
print(switch.get_neighbors())
switch.enable("enable_password")
# Or you can throw plain commands at the switch
print(switch.cmd("show run"))
switch.cmd("reload\n")
這里有一個坑,代碼里面最后一行,會使交換機重啟,請使用前注釋掉。
缺點,只支持telnet,不支持ssh連接
2、使用pexpect,paramiko庫,交互方面存在些許不足,不是太方便。
pexpect.spawn方法在windows下并不支持,所以只能在Linux下面執行。
演示代碼如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Date: 2017/4/5
# Created by 獨自等待
# 博客 http://www.waitalone.cn/
import pexpect
def ssh_cmd(user, ip, cmd, passwd, enpass):
ssh = pexpect.spawn('ssh %[email?protected]%s %s' % (user, ip, cmd))
try:
i = ssh.expect(['Password:', 'continue connecting (yes/no)?'], timeout=5)
if i == 0:
ssh.sendline(passwd)
elif i == 1:
ssh.sendline('yes')
ssh.expect('Password: ')
ssh.sendline(passwd)
except pexpect.EOF:
print "EOF"
except pexpect.TIMEOUT:
print "TIMEOUT"
else:
print ssh.read()
ssh.close()
存在一個問題,某些命令需要進行enable模式,這里好像也可以用,但是我沒有研究好。
paramiko庫比較強大,常用來ssh交互登錄,當然也是可以登錄cisco交換機的,演示代碼:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Date: 2017/4/5
# Created by 獨自等待
# 博客 http://www.waitalone.cn/
import paramiko
import time
hostname = 'xx.xx.xx.xx'
port = 22
username = 'xx'
password = '[email?protected]'
client = paramiko.SSHClient() # 綁定實例
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname, port, username, password, timeout=5)
remote_conn = client.invoke_shell()
remote_conn.send('enable\n')
time.sleep(1)
remote_conn.send('[email?protected]\n')
time.sleep(1)
remote_conn.send('show run\n')
time.sleep(1)
output = remote_conn.recv(65535)
print output
由于show run得到的結果比較長,這里只能獲取一部分,應該也是可以全部獲取的。
3、使用netmiko庫操作交換機,這里強烈推薦,支持N多設備。
安裝方法: pip install netmiko
演示代碼:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# Date: 2017/4/5
# Created by 獨自等待
# 博客 http://www.waitalone.cn/
# https://pynet.twb-tech.com/blog/automation/netmiko.html
from netmiko import ConnectHandler
import time
import os
def Cisco(ip):
"思科交換機配置導出函數"
cisco_881 = {
'device_type': 'cisco_ios',
'ip': ip,
'username': 'xx',
'password': '[email?protected]',
'port': 22, # optional, defaults to 22
'secret': '[email?protected]', # optional, defaults to ''
'verbose': False, # optional, defaults to False
}
print u'正在連接交換機:%s\n' % (ip)
net_connect = ConnectHandler(**cisco_881)
net_connect.enable()
commands = [
'show arp',
'show mac address-table',
]
timestr = time.strftime('%Y-%m-%d', time.localtime(time.time()))
for cmd in commands:
filename = u'%s_%s_%s.txt' % (ip, cmd.replace(' ', '_'), timestr)
save = open(filename, 'w')
print u'正在執行命令:' + cmd
result = net_connect.send_command(cmd)
save.write(result)
print u'命令執行完畢,結果保存于當前目錄%s中!\n' % filename
net_connect.disconnect()
if __name__ == '__main__':
ips = [
'xx.xx.xx.xx',
'xx.xx.xx.xx',
]
for ip in ips:
Cisco(ip)
# 上傳文件至目標服務器
rsync = 'rsync -avz --password-file=rsync.passwd *.txt [email?protected]::upload'
# 列出目標服務器文件列表
# 'rsync --list-only -v [email?protected]::upload'
if os.system(rsync) == 0:
print u'文件上傳成功!'
else:
print u'文件上傳失敗!'
優點:支持telnet,ssh連接。
from www.waitalone.cn.thanks for it.
總結
以上是生活随笔為你收集整理的python备份cisco交换机_Python备份Cisco交换机配置 | CN-SEC 中文网的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python如何修改excel数据库_p
- 下一篇: tcp转串口_浅谈串口转以太网技术