#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()
Комментариев нет:
Отправить комментарий