批量SSH遠程到交換機進行相同的配置


一、環境准備:

  1. python 版本,Microsoft Store 直接安裝的:

D:\Documents\python lab\python\python_switch>python
Python 3.8.0 (tags/v3.8.0:fa919fd, Oct 14 2019, 19:37:50) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.

  2.  paramiko 是一個實現SSH遠程設備的模塊,由於是第三方模塊,需要先安裝:

pip install paramiko

 

二、創建遠程的 IP 地址列表和配置命令的 txt 文件:

  兩個文件與腳本放在同一目錄下

  1. 新建名稱為:ip_list.txt 的 txt 文件用來存放需要 SSH 的交換機IP地址

192.168.22.64
192.168.22.1

  2. 新建名稱為:cmd_list.txt 的 txt 文件用來存放需要配置的命令

system-view
undo FTP server
vlan 28

 

三、批量SSH遠程到交換機進行配置的腳本:

"""
    作者:五個一齋
    功能:批量SSH配置網絡設備
    版本:1.0
    日期:2021年03月17日
"""
# _*_ encoding:gbk _*_
# _*_ coding:UTF-8 _*_
import paramiko
import time
import getpass
# 為了異常處理來應對網絡設備不可達引起的socket.error,必須引入socket這個Python內建模塊
import socket
import io

username = input('Username:')
password = getpass.getpass('Password:')

ip_file = 'ip_list.txt'
cmd_file = 'cmd_list.txt'
log = io.open('log.txt', 'a', encoding='utf-8')

# 創建兩個空列表用於統計有哪些設備因為密碼錯誤無法登錄、設備本身問不可達無法登錄
switch_with_authentication_issue = []
switch_not_reachable = []

iplist = open(ip_file, 'r')
for line in iplist.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)
        print("恭喜你成功登錄 ", ip)
        command = ssh_client.invoke_shell()
        cmdlist = open(cmd_file, 'r')
        cmdlist.seek(0)
        for line in cmdlist.readlines():
            command.send(line)
            time.sleep(1)
        cmdlist.close()
        output = command.recv(65535)
        print(bytes.decode(output))
        bs = bytes.decode(output)
        log.write(bs)
    except paramiko.ssh_exception.AuthenticationException:
        print("密碼錯誤 " + ip + ".")
        switch_with_authentication_issue.append(ip)
    except socket.error:
        print(ip + " 無法連接")
        switch_not_reachable.append(ip)

iplist.close()
ssh_client.close()

print('\n因認證問題無法登錄:')
log.write("\n\n\n\n密碼錯誤的交換機:\n")
for i in switch_with_authentication_issue:
    print(i)
    log.write(i + "\n")
print('\n無法連接以下交換機:')
log.write("\n\n\n無法連接的交換機:\n")
for i in switch_not_reachable:
    print(i)
    log.write(i + "\n")
input("按回車關閉窗口!~")

測試效果:

D:\Documents\python lab\python3\python_switch>"C:/Program Files/Python38/python.exe" "d:/Documents/python lab/python3/python_switch/swconifg_v1.py"
Username:admin
Password:
恭喜你成功登錄  192.168.22.64

Info: The max number of VTY users is 10, and the number
      of current VTY users on line is 2.
      The current login time is 2021-03-17 18:24:46+08:00.
<switch>system-view
Enter system view, return user view with Ctrl+Z.
[switch]undo FTP server
Info: Succeeded in closing the FTP server.
[switch]vlan 28
192.168.22.1 無法連接

因認證問題無法登錄:

無法連接以下交換機:
192.168.22.1
按回車關閉窗口!~

 

同時會在腳本文件目錄下生成一個log.txt文件,記錄命令運行的情況。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM