Страницы

Поиск по вопросам

среда, 25 декабря 2019 г.

Скрипт на Python для бэкапа конфига Cisco

#python #ssh #cisco


Пытаюсь написать скрипт для бэкапа конфига cisco через ssh  и модуль paramiko. Сам
скрипт:

import paramiko
import datetime
import sys
import os
import time

#now = datetime.datetime.now()

host = "192.168.100.1" 
user = "user" 
password = "password"
secret = "password"
port=22

client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname=host, username=user, password=password, port=port)
stdin, stdout, stderr = client.exec_command('enable')
stdin.write(secret +'\n')
stdin, stdout, stderr = client.exec_command('term len 0')
stdin, stdout, stderr = client.exec_command('sh ver')
a = stdout.read()
print a
f = open('testing.txt', 'a')
f.write(a)
f.close()
client.close()


при запуске выдает 

C:\Python27>python.exe d:\cisco_backup_v0.1.py
SSH connection established to 192.168.100.1
Traceback (most recent call last):
  File "d:\cisco_backup_v0.1.py", line 23, in 
    stdin, stdout, stderr = client.exec_command('term len 0')
  File "C:\Python27\lib\site-packages\paramiko\client.py", line 341, in exec_com
mand
    chan = self._transport.open_session()
  File "C:\Python27\lib\site-packages\paramiko\transport.py", line 615, in open_
session
    max_packet_size=max_packet_size)
  File "C:\Python27\lib\site-packages\paramiko\transport.py", line 731, in open_
channel
    raise e
EOFError


Версия python 2.7, запускаю под виндой. Если закомментировать эту строку, то ругается
дальше. Пробовал без enable пароля просто снять sh ver, тогда все отлично.

В чем ошибка?
    


Ответы

Ответ 1



Переделал с использованием client.invoke_shell() Вот скрипт import sys import time import paramiko import os import cmd HOST = '192.168.100.1' USER = 'user' PASSWORD = 'password' secret = 'password' client = paramiko.SSHClient() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) client.connect(HOST, username=USER, password=PASSWORD) chan = client.invoke_shell() time.sleep(1) chan.send('en\n') chan.send(secret +'\n') time.sleep(1) chan.send('term len 0\n') time.sleep(1) chan.send('sh run\n') time.sleep(10) output = chan.recv(99999) time.sleep(3) print output time.sleep(10) client.close()

Комментариев нет:

Отправить комментарий