Невозможно передать 2-й элемент (команду router) в списке python сетевому устройству - PullRequest
1 голос
/ 20 апреля 2019
  1. У меня есть текстовый файл с IP-адресами маршрутизатора (ips.txt)
  2. У меня есть текстовый файл, в котором есть команды, которые необходимо передать маршрутизатору (magiccmd.txt)

Я открыл файлы ips.txt и magiccmd.txt и преобразовал строку в список. Так что теперь мои IP-адреса сохраняются в виде списка «ip_add_list», а мои команды сохраняются в виде списка «magic_list».

Теперь, используя цикл for, я могу подключиться по SSH к первому маршрутизатору и выполнить первую команду. Точно так же сценарий появляется во втором маршрутизаторе и выполняет первую команду. Используя цикл for, я могу выбирать элементы из списка ip_add_list. Но я могу выбрать только 1-й предмет из списка «magic_list». Невозможно выбрать второй элемент из списка 'magic_list'

Может кто-нибудь дать мне знать, чего не хватает в моем сценарии? Почему он не выполняет 2-ю команду из списка?

Я просмотрел различные статьи, посвященные выбору команд из TXT-файла и передаче его маршрутизатору. Я могу видеть статьи, относящиеся к paramiko, но не могу найти что-то, связанное с «pexpect».

#!/usr/local/bin python3.6
import pexpect
import sys
import time
import re
ssh_un = "remotessh"
def dologinRG(child):
    print ('logging into RG')
    # Enter Password
    child.expect ('password:')
    child.sendline ('test')
    return
def domagiccmd(child):
    print ('issue magic commands')
    for magic_cmds in magic_list:
        print (magic_cmds)
        child.expect ('NOS/')
        child.sendline ('magic')
        child.expect ('NOS/')
        child.sendline (magic_cmds)
        child.expect ('NOS/')
        return      
for ip_string in open("ips.txt"):
    ip_add_list = ip_string.strip().split(',')
    print (ip_add_list)
    for magic_string in open('magiccmd.txt'):
        magic_list = magic_string.strip().split(',')
        print (magic_list)
        for linux_string in open('linuxcmd.txt'):
            linux_list = linux_string.strip().split(',')
for wan_ip in ip_add_list:
    print (wan_ip)
    child = pexpect.spawnu ('ssh %s@%s' % (ssh_un, wan_ip), logfile=sys.stdout, timeout = None)
    dologinRG(child)
    domagiccmd(child)

1 Ответ

0 голосов
/ 28 апреля 2019

У меня это работает:

import pexpect
import sys
import time
import re

ssh_un = "remotessh"

def dologinRGmagic(child):
    print ('logging into RG')
    prompt = child.expect(['password:', r"yes/no",pexpect.EOF])
    print (prompt)
    if prompt == 0:
        child.sendline ('Alcatel')
        child.expect ('NOS/')
        child.sendline ('magic')
        child.expect ('NOS/')
    elif prompt == 1:
        child.sendline ('yes')
        child.expect ('password:')
        child.sendline ('Alcatel')
        child.expect ('NOS/')
        child.sendline ('magic')
        child.expect ('NOS/')
    return

def dologinRGlinux(child):
    print ('logging into RG linux prompt')
    child.sendline ('!')
    child.expect ('#')
    return

def domagiccmd(child):
    print ('issue magic commands')
    for magic_cmds in magic_list:
        child.sendline (magic_cmds)
        child.expect ('NOS/')

def dolinuxcmd(child):
    print ('issue linux commands')
    for linux_cmds in linux_list:
        child.sendline (linux_cmds)
        child.expect ('#')

for ip_string in open("ips.txt"):
    ip_add_list = ip_string.strip().split(',')
    print (ip_add_list)
    for magic_string in open('magiccmd.txt'):
        magic_list = magic_string.strip().split(',')
        print (magic_list)
        for linux_string in open('linuxcmd.txt'):
            linux_list = linux_string.strip().split(',')
            print (linux_list)

for wan_ip in ip_add_list:
    print ('logging into RG', wan_ip)
    child = pexpect.spawnu ('ssh %s@%s' % (ssh_un, wan_ip),
                            logfile = open('/tmp/rglogs.txt','a'),
                            timeout = None)
    dologinRGmagic(child)
    domagiccmd(child)
    dologinRGlinux(child)
    dolinuxcmd(child)
...