import paramiko
import datetime
import subprocess
# Параметры подключения SSH
user = 'admin'
secret = 'password'
port = 22
# Текущее время для создания уникальных имен файлов
time_now = datetime.datetime.now().strftime('%m_%d_%Y_%H_%M_%S')
# Путь к файлу с IP-адресами устройств
devicelist = 'C:\\Users\\admin\\Desktop\\script\\device-list.txt'
failed_devices_file = 'C:\\Users\\admin\\Desktop\\script\\noaccess.txt' # Новый файл для недоступных устройств
# Открываем файл с IP-адресами
with open(devicelist, 'r') as input_file:
iplist = input_file.readlines()
# Проверка доступности устройства с помощью ping
def is_device_reachable(ipaddr):
try:
subprocess.check_output(['ping', '-c', '1', ipaddr])
return True
except subprocess.CalledProcessError:
return False
# Подключение к устройству и снятие резервной копии
def backup_device(ipaddr):
try:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=ipaddr, username=user, password=secret, port=port)
# Получаем hostname устройства
stdin, stdout, stderr = ssh.exec_command('show run | include hostname')
hostname = stdout.read().decode('utf-8').split()[1]
# Выполняем команду для получения конфигурации
stdin, stdout, stderr = ssh.exec_command('show run')
config_output = stdout.read().decode('utf-8')
# Сохраняем конфигурацию в файл
with open(f'{hostname}_{time_now}.txt', 'w') as outfile:
outfile.write(config_output)
print(f'Резервное копирование для {hostname} ({ipaddr}) завершено!')
except paramiko.AuthenticationException:
print(f'Ошибка аутентификации для {ipaddr}. Проверьте учетные данные.')
except paramiko.SSHException:
print(f'Ошибка SSH для {ipaddr}. Убедитесь, что SSH настроен на устройстве.')
# Проверяем доступность и выполняем резервное копирование
for ip in iplist:
ipaddr = ip.strip()
if is_device_reachable(ipaddr):
backup_device(ipaddr)
else:
print(f'Устройство {ipaddr} недоступно.')
print('Процесс завершен!')