Резервное копирование конфигурации MikroTik RouterOS с помощью expect

. Просмотров: 147

Рейтинг:  5 / 5

Звезда активнаЗвезда активнаЗвезда активнаЗвезда активнаЗвезда активна
 

На оборудовании MikroTik есть два способа резервного копирования с помощью команд system backup и export.

При использовании system backup вы получаете полную резервную копию конфигурации устройства, включая пользователей. Но у этого варианта есть два существенных недостатка:

1. При использовании system backup save во внутреннюю память маршрутизатора создается файл бэкапа. А у этой памяти имеется ограниченный ресурс на количество циклов записи, в результате она может быстро выйти из строя.

2. Второй минус, это то, что полученный файл будет не текстовым и посмотреть его содержимое сложно.

При использовании же команды export на выходе вы получаете текстовый файл со списком всех команд. Большой плюс текстового файла в том что вы можете увидеть сами команды настройки, и, к примеру, сравнить версии конфигураций и увидеть различия. Из минусов, при использовании export не экспортируются некоторые параметры, например локальные пользователи. Еще один существенный плюс использования export - это можно вывести конфигурацию на экран без использования внутренней памяти маршрутизатора.

Предлагаю свой вариант централизованного сбора конфигураций оборудования с помощью команды export и скрипта на expect.

Установка на Centos

  1. Уcтанавливаем expect и текстовый редактор nano.
    yum install nano expect –y
  2. Создаем папку для нашего скрипта и переходим в неё
    mkdir /opt/backup
    cd /opt/backup
  3. Создаем наш скрипт 
    nano mikrotik.exp
  4. Вводим код скрипта по окончании сохраняем нажав Ctr+X, Y, Enter.
  5. Делаем файл запускаемым
    chmod +x mikrotik.exp
  6. Запускаем и проверяем
    ./mikrotik.exp ip-адрес логин пароль
  7. Процесс выполнения скрипта выводится на экран. При удачном выполнении будет создан файл с конфигурацией с именем «ip адрес_дата_время»
  8. При необходимости сделать бэкап нескольких устройств, то можно сделать батничек, например mikrotik.sh с следующим содержанием:
    /opt/backup/mikrotik.exp ip-адрес1 логин пароль
    /opt/backup/mikrotik.exp ip-адрес2 логин пароль
    /opt/backup/mikrotik.exp ip-адрес3 логин пароль

 

Собственно сам скрипт mikrotik.exp:

#!/usr/bin/expect
set timeout 10
log_user 0
set HOST_IP [lindex $argv 0]
set USER_LOGIN [lindex $argv 1]
set USER_PASS [lindex $argv 2]
set error_msg "";
if { [string length $HOST_IP] > 0 & [string length $USER_LOGIN] > 0 & [string length $USER_PASS] > 0} {
	spawn ssh -q -o StrictHostKeyChecking=no $USER_LOGIN+ct@$HOST_IP
	expect {
		timeout { set error_msg "$HOST_IP Error: Failed to get password prompt.\n"; send_user "\n$error_msg" }
		eof { set error_msg "$HOST_IP Error: SSH failure for $HOST_IP.\n"; send_user "\n$error_msg" }
		"*assword:" {
			send "$USER_PASS\r"
			expect {
				default { set error_msg "$HOST_IP Error: Could not login. Incorrect password.\n"; send_user "\n$error_msg";  }
				"*] >" {
					send_user "\n$HOST_IP login OK.\n";
					match_max	500000
					set output [open ${HOST_IP}_[clock format [clock seconds] -format {%Y-%m-%d_%H-%M}] w]
					send "export terse\r"
					expect "\r\n"
					expect {
						default { set error_msg "$HOST_IP Error: incorrect prompt after command\n"; send_user "\n$error_msg" }
						"\r\r" {
							puts $output $expect_out(buffer)
							send_user "$HOST_IP OK.\n";
							close $output
						}
					}
					send "quit\r"
					# close ssh session
					close
				}
			}
		}
	}
} else {
	send_user "Error: incorrect param.\n";
	exit 1
}

PS: Это упрощенный вариант скрипта, урезанный специально под MikroTik. Я же в работе использую другой вариант с поддержкой оборудования различных вендоров, хранением истории изменений в svn и уведомлением на почту.

 

Недостаточно прав для комментирования