使用python脚本登录网络设备


#!/usr/bin/env python
#_*_coding:utf-8_*_
#Author:Tiger At
'''
1.此脚本使用python3编写
2.此脚本用于通过linux堡垒机登录网络设备
3.仅供学习和参考
'''

#导入对应模块
from netmiko import ConnectHandler
from netmiko import redispatch
import getpass
from datetime import datetime
import time

#输入堡垒机IP地址
jumpserver_ip = input('jumpserver_ip: ')
#输入堡垒机用户名
jumpserver_username = input('jumpserver_username: ')
#输入堡垒机用户密码,注getpass模块在pycharm上运行有问题
jumpserver_password = getpass.getpass('jumpserver_password: ')

#定义堡垒机
jumpserver = {
    #定义堡垒机类型
    'device_type': 'ovs_linux',
    #定义堡垒机IP
    'ip': jumpserver_ip,
    #定义堡垒机用户名
    'username': jumpserver_username,
    #定义堡垒机密码
    'password': jumpserver_password,
}

#输入要管理设备的用户名/密码信息
username = input('aaa_username: ')
password = getpass.getpass('aaa_password: ')

#从文件“ip_list.txt”读取设备管理IP地址信息,默认在同级目录下创建此文件即可
ip_file = list(open('ip_list.txt', 'r'))
#从文件“command.txt”读取操作命令信息,默认在同级目录下创建此文件并添加对应要执行的命令即可
command_file = list(open('command.txt', 'r'))
#打开错误文件“Error_list.txt”以便存放错误信息,默认在同级目录下创建此文件即可
error_file = open('Error_list.txt', 'a')

#创建连接堡垒机对象,连接堡垒机
net_connect = ConnectHandler(**jumpserver)
for line in ip_file:
    #显示堡垒机提示符
    print(net_connect.find_prompt())
    try:
        #获取IP地址信息
        ip = line.strip()
        #打印当前时间
        print('===============================' + datetime.now().strftime(
            "%Y-%m-%d %H:%M:%S") + '===============================' + '\n')
        #进行telnet操作
        net_connect.write_channel('telnet ' + ip + '\n')
        #等待2秒
        time.sleep(2)
        #存储登录结果,后续用于判断
        result = net_connect.read_channel()
        #打印登录结果
        print(result)
        
        #根据返回结果判断是否使用ssh登录
        if 'foreign host' in result or 'Connection refused' in result:
            #尝试SSH登录
            net_connect.write_channel('ssh -l ' + username + ' ' + ip + '\n')
            time.sleep(1)
            #存储SSH结果
            result1 = net_connect.read_channel()
            #打印SSH结果
            print(result1)
            #判断是否提示存储秘钥
            if '(yes/no)' in result1:
                net_connect.write_channel('yes' + '\n')
                time.sleep(1)
            #输入密码进行登录
            net_connect.write_channel(password + '\n')
            time.sleep(1)
        #判断TELNET登录提示符,用于TELNET登录
        if 'username' in result or 'Username' in result:
            #调用用户名/密码信息尝试TELNET登录
            net_connect.write_channel(username + '\n' + password + '\n')
            time.sleep(1)
        #关联设备类型,以便后续进行对应厂家命令操作
        redispatch(net_connect, device_type='cisco_ios')
        #打印设备提示符
        print(net_connect.find_prompt())
        
        #获取相应命令,进行相关命令输入
        for command in command_file:
            show_commands = command.strip()
            #保存命令输入结果
            output = net_connect.send_command(show_commands)
            #创建对应记录保存文件
            syslog = open(ip + '.txt', 'a+')
            #将结果写入创建的日志文件
            syslog.write(net_connect.find_prompt() + show_commands + '\n' + output + '\n')
        #退出设备
        net_connect.send_command_timing('exit')
    异常存储及打印
    except:
        print(ip + ' error')
        error_file.write(ip + ' error' + '\n')

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM