equipo de red de patrulla python3 paramiko
Operación y Mantenimiento YouthO & M Youth
Equipo de red de inspección
Usé paramiko para inspeccionar el equipo de red y encontré un gran agujero. Es la ejecución del programa la que ve que la segunda página no se puede mostrar si hay varias páginas en la configuración. No puedo encontrar el lugar donde paramiko pasa la página Agregar varios espacios no es muy útil.
- Evite este hoyo e inicie sesión automáticamente para que se transmitan los siguientes comandos. Es un asunto trivial. Consulte el segundo guión como referencia.
cisco的全页打印显示配置信息的命令:
terminal length 0
show run
华为和H3C的全页打印显示配置信息的命令:
user-interface vty 0 4
screen-length 0
display current-configuration
- Pase la contraseña del modo global directamente en el comando.
#!/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)
- Agregar algunos espacios más todavía no resolvió el problema de pasar la página, el primero fue escrito con pexpect, lo que puede evitar este hoyo, pero la flexibilidad es demasiado baja. Cuando se cambia la clave pública ssh, no se puede conectar. Cada fabricante tiene que reescribirla ...
#!/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)