équipement de réseau de patrouille paramiko python3

équipement de réseau de patrouille paramiko python3

Fonctionnement et entretien YouthO & M Youth

Équipement de réseau d'inspection

J'ai utilisé paramiko pour inspecter l'équipement réseau et j'ai trouvé un gros trou. C'est le show run qui voit que la deuxième page ne peut pas être affichée s'il y a plusieurs pages dans la configuration. Je ne trouve pas l'endroit où paramiko tourne la page L'ajout de plusieurs espaces n'est pas très utile.

équipement de réseau de patrouille paramiko python3

  • Évitez cette fosse et connectez-vous automatiquement pour obtenir les commandes suivantes à transmettre. C'est une question triviale. Reportez-vous au deuxième script pour référence.

cisco的全页打印显示配置信息的命令:

terminal length 0
show run

华为和H3C的全页打印显示配置信息的命令:

user-interface vty 0 4
screen-length 0
display current-configuration
  • Passez le mot de passe du mode global directement dans la commande.

#!/usr/bin/python3
# -*- coding:utf-8 -*-

import paramiko
import time

def main(host, username, password, commands):
    client = paramiko.SSHClient()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    client.connect(host, username=username, password=password,
                   port=22, allow_agent=False, look_for_keys=False)
    channel = client.invoke_shell()  # 请求交互式Shell会话
    for command in commands:
        channel.send(command + "\n")  # 发送指令
        while not channel.recv_ready():  # 等待数据到达
            time.sleep(1)
        output = channel.recv(40960)  # 从通道接收数据 nbytes(int)–读取的最大字节数
        print(output.decode())
    client.close()

if __name__ == '__main__':
    host = '192.168.208.131'
    username = 'root'
    password = 'root.123'
    commands = ['enable', 'cisco', 'terminal length 0','show run', 'show ip int br', 'exit']  #全页打印terminal length 0
    main(host, username, password, commands)
  • L'ajout de quelques espaces supplémentaires n'a toujours pas résolu le problème du tournage de page, le premier a été écrit avec pexpect, ce qui permet d'éviter ce gouffre, mais la flexibilité est trop faible. Lorsque la clé publique ssh est modifiée, elle ne peut pas être connectée. Chaque fabricant doit la réécrire ...

#!/usr/bin/python
#-*- coding:utf-8 -*-

import pexpect
import sys
import time

def main(host,username,password,enable,commands):
    # host = '192.168.208.131'
    # username = 'root'
    # password = 'root.123'
    # enable = 'cisco'
    # commands = [ show processes memory ]
    commands = str(commands).split(';')
    child = pexpect.spawnu('ssh %s@%s' % (username,host))
    child.logfile = sys.stdout
    login = child.expect(['yes/no', '[P|p]assword:', pexpect.EOF, pexpect.TIMEOUT])
    if login == 0:
        child.sendline('yes')
        child.expect('[P|p]assword:')
        child.sendline('%s' % password)
    elif login == 1:
        child.sendline('%s' % password)
    child.expect('\>')
    child.sendline('enable')
    child.expect('[P|p]assword:')
    child.sendline('%s' % enable)
    for command in commands:
        child.expect('\#')
        child.sendline('%s' % command)
        index = child.expect(['--More--','\#'])
        if index == 0:
            for i in range(5):
                child.send(' ')
                time.sleep(1)
            #child.sendline(' ')
        child.sendline('')
        #time.sleep(2)
    child.expect('\#')
    child.sendline('exit')
    child.close()

if __name__ == '__main__':
    host = sys.argv[1]
    username = sys.argv[2]
    password = sys.argv[3]
    enable = sys.argv[4]
    commands = sys.argv[5]
    main(host,username,password,enable,commands)

Je suppose que tu aimes

Origine blog.51cto.com/15082392/2656367
conseillé
Classement