Почему мой ребенок не возвращается
Когда я запускаю этот скрипт на устройствах 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". Не уверен, почему это работает, но это так.