Python在自動化運維中的應用之批量配置交換機

2021-09-19 12:38:10 字數 3572 閱讀 8640

最近在學習python語言,想著通過一些實際應用來學習可以回事理解,所以想到批量配置管理企業內部的思科交換機。

python是一門解釋性語言比較高階有很多的基礎庫和第三方開發庫,現在開發環境也比較熱門。

1. 怎麼安裝python環境這裡就說了,這裡是基於python2.7.5開發的,安裝好python後還需要安裝可以配置交換機基礎庫paramiko, 這個模組可以與很多態別的交換機連線。

安裝方式:

1. 先安裝pip,再安裝paramiko庫

curl "" -o "get-pip.py"

python get-pip.py

pip install paramiko

2. 安裝好之後可以在專案裡面通過import paramiko來引用這個庫介面

#!/usr/bin/env python

import paramiko

3.通過專案例項來實現批量配置思科交換機:

# -*- coding: utf-8 -*-

import ciscolib

def main():

password="wfweb2kd"

username="root"

enable_pwd="c#andphp"

for ip in open('sw2960.txt').readlines():

ip = ip.strip()

if username != "":

switch = ciscolib.device(ip, password, username, enable_pwd)

else:

switch = ciscolib.device(ip, password, enable_password=enable_pwd)

try:

switch.connect()

print("logged into %s,successful" % ip)

except ciscolib.authenticationerror as e:

print("couldn't connect to %s: %s" % (ip, e.value))

continue

except exception as e:

print("couldn't connect to %s: %s" % (ip, str(e)))

continue

switch.enable(enable_pwd)

switch.cmd("clock set 18:42:30 22 apr 2019")

switch.cmd("conf t")

switch.cmd("service password-encryption")

switch.cmd("username admin secret admin123") #//這裡只是測試,實際環境不要這樣

switch.cmd("line vty 0 4")

switch.cmd("login local")

switch.cmd("crypto key generate rsa")

switch.cmd("\n")

#//這裡只是測試最好是一條一條測試好了再上批量,這裡踩了乙個坑。

switch.cmd("end")

switch.cmd("wri mem")

switch.disconnect()

if __name__ == '__main__':

main()

4.配置成功之後可以通過ssh方式來連線配置,上面配置目的是啟動交換機的 ssh加密連線22,但是這裡也要注意有些交換機是沒有ssh模組的也就是沒有的。

[sw2960#]crypto key generate rsa
5.配置ssh來配置交換機:

#!/usr/bin/env python

import paramiko

import time

import getpass

import sys

import socket

username = raw_input("使用者名稱:")

password = getpass.getpass("密碼:")

ip_file = sys.ar**[1]

cmd_file = sys.ar**[2]

switch_with_authentication_issue =

switch_not_reachable =

f = open(ip_file,'r')

for line in f.readlines():

try:

ip = line.strip()

ssh_client = paramiko.sshclient()

ssh_client.set_missing_host_key_policy(paramiko.autoaddpolicy())

ssh_client.connect(hostname=ip,username=username,password=password,look_for_keys=false)

print "你已經成功連線到: ", ip

command = ssh_client.invoke_shell()

cmdlist = open(cmd_file,'r')

cmdlist.seek(0)

for line in cmdlist.readlines():

command.send(line + "\n")

time.sleep(2)

cmdlist.close()

output = command.recv(65535)

print output

except paramiko.ssh_exception.authenticationexception:

print "使用者認證失敗的" + ip + "."

except socket.error:

print ip + "不可達,請檢查網路."

f.close()

ssh_client.close

print '\n 以下交換機認證失敗:'

for i in switch_with_authentication_issue:

print i

print '\n 以下交換機網路不可達:'

for i in switch_not_reachable:

print i

下面貼出來,ip檔案和命令檔案寫法:

執行結果 :

運維自動化

1,cobbler安裝環境準備 安裝epel epel release 6 8.noarch.rpm x86 64 epel release 6 8.noarch.rpm x86 安裝系列依賴環境 要是區域網用,建議關閉iptables 或是放行25151 80 69埠 和關閉selinux 檢視狀...

自動化運維

考慮的因素 源 打包為映象 發布到映象庫 利用k8s發布到物理機器執行,以服務的形式對外提供服務 目前的做法 0 建立乙個執行遠端命令的框架 1 每個應用建立乙個部署檔案指令碼 a 指定元 位址 c 同步源 到目標主機 d 接受指令碼引數 vername 2 版本號,映象tag fromport 3...

Python 自動化運維 pycurl

web服務質量 1.服務可用性 2.服務響應速度 2.例項 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 ...