Почему мой ребенок не возвращается

Когда я запускаю этот скрипт на устройствах ASAOS и IOS, он обнаруживает, что они различаются в функции enable_mode, и выдает "терминал-пейджер 0" для ASAOS и "длина терминала 0" для IOS.

Затем в основной функции у меня есть команда 'show run'. Эта команда выполняется на устройстве IOS, но кажется, что она останавливается сразу после того, как на ASA введена команда "Terminal pager 0".

Можно ли предположить, что единственным выводом на консоль (кроме 'print') является последняя успешная строка?

Вот что я получаю, когда запускаю скрипт

терминал пейджер 0

home-as <= название ASA минус последняя буква по какой-то причине

команда show run <= команда show run, выполненная на коммутаторе IOS

Конфигурация здания...

[ДОБЫТАЯ]

def enable_mode(user, host, passwd, en_passwd):
    ssh_newkey = 'Are you sure you want to continue connecting (yes/no)?'
    constr = 'ssh ' + user + '@' + host
    child = pexpect.spawn(constr)
    ret = child.expect([pexpect.TIMEOUT, ssh_newkey, '[P|p]assword:'])

    if ret == 0:
        print '[-] Error Connecting to ' + host
        return
    if ret == 1:
        child.sendline('yes')
        ret = child.expect([pexpect.TIMEOUT])
        if ret == 0:
            print '[-] Could not accept new key from ' + host
            return
    child.sendline(passwd)
    auth = child.expect(['[P|p]assword:', '.>', '.#'])
    if auth == 0:
        print 'User password is incorrect'
        return
    if auth == 1:
        child.sendline('enable')
        child.sendline(en_passwd)
        enable = child.expect([pexpect.TIMEOUT, '.#'])
        if enable == 0:
            print 'enable password for ' + host + ' is incorrect'
            return
        if enable == 1:
            child.sendline(SHOWVER)
            what_os = child.expect([pexpect.TIMEOUT, '.IOS.', '.Adaptive.'])
            if what_os == 0:
                print 'show ver' + ' time out' + 'for ' + host
                return
            if what_os == 1:  # IOS
                child.sendcontrol('c')
                child.expect(PRIV_EXEC_MODE)
                child.sendline(IOSTERMLEN0)
                child.expect(PRIV_EXEC_MODE)
                return child
            if what_os == 2:  # ASAOS
                child.sendline(QOUTMORE)
                child.expect(PRIV_EXEC_MODE)
                child.sendline(ASATERMPAGER0)
                child.expect(PRIV_EXEC_MODE)
                return child

def main():
    conf_parser = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter,
                                          add_help=False)
    conf_parser.add_argument('--conf_file', help='Specify a conf file', metavar='FILE')
    conf_parser.add_argument('--host_file', dest='hosts', type=file, help='specify a target host file')
    args, remanaing_argv = conf_parser.parse_known_args()

    if args.conf_file:
        conf = ConfigParser.SafeConfigParser()
        conf.read([args.conf_file])
        defaults = dict(conf.items('Defaults'))
    else:
        defaults = {'option': 'default'}
    parser = argparse.ArgumentParser(parents=[conf_parser])
    parser.set_defaults(**defaults)

    args = parser.parse_args()
    hosts = args.hosts
    user = args.user
    passwd = args.passwd
    en_passwd = args.en_passwd

    if hosts:
        for line in hosts:
            host = line.rstrip()
            child = enable_mode(user, host, passwd, en_passwd)
            if child:
                current_time = time.strftime('%m.%d.%y.%M.%S', time.localtime())
                output_name = "cisco_configs/{0}_{1}.txt".format(host, current_time)
                sys.stdout = open(output_name, 'w')
                send_command(child, SHOWRUN)
    else:
        print('I need hosts!!')
if __name__ == '__main__':
    main()

1 ответ

Решение

Получил это работает. Я использовал переменную "QOUTMORE" в "enable_mode" и "if what_os == 2". Эта переменная была установлена ​​в 'q' в другом модуле, называемом "from modules.cmds import *", но вместо этого я использовал 'q', а не переменную в моей функции "enable_mode". Не уверен, почему это работает, но это так.

Другие вопросы по тегам