Бэкапим часто изменяемые настройки с Linux-a на Windows cmd-скриптом по scp

в 20:50, , рубрики: linux, бэкап, системное администрирование, метки: ,

Сценарий

Несколько площадок и десяток серверов. Множественные правки в конфигах в течении дня. Какие-то свои, какие-то по запросу пользователей/клиентов. Требуется сохранять свои изменения у себя на рабочей станции, фиксировать время изменений, хранить в очевидном для себя виде несколько версий. Кроме прочего максимально легко расширять имеющуюся структуру бэкапов с появлением новых серверов, установкой новых пакетов.

Решение

1. Используя scp заскриптовать бэкап конфигурации для каждого администрируемого пакета.
2. Создать очевидную для себя структуру хранения.
3. Любую новую установку или ввод нового сервера сопровождать клонированием скрипта из шаблона.
4. Любое изменение в настройках заканчивать запуском скрипта.

Версии и структура хранения

Для фиксирования изменений используем %date% и %time% вправленные в читабельный вид. Для хранения используем, например, следующую структуру папок:

|-- <path_to_backup>
    |-- <site_1>
    |   |--<server_1>
    |   |   |-- <service_1>
    |   |   |   |-- <backup_1>
    |   |   |   |   |-- <path_to_service_1>
    |   |   |   |   |   |-- <config_file_1>
    |   |   |   |   |   `-- <config_file_2>
    |   |   |   |   `-- <path_to_service_n>
    |   |   |   `-- <backup_n>
    |   |   |-- <service_n>
    |   |   `-- <full_server_1_backup>
    |   `-- <server_n>
    `-- <site_n>

Следуем заранее выработанному правилу именования для площадок, серверов, пакетов (например, ec2, srv-01, nginx-conf, соответственно). Новые бэкапы будут создаваться на уровне backups и называться <дата@время_создания>. Внутри каждого бэкапа структура папок будет отражать пути до файлов на сервере. После завершения копирования добавим полученный бэкап в rar-архив.

Пример CMD-скрипта

Для копирования с Linux на Windows из Windows будем использовать pscp.
В шапке максимально закоменчиваем что, откуда и куда бэкапим, что используем, с какими параметрами в каком случае и т.д. Так будет проще воспроизвести скрипт для другого сервера/пакета. Все достаточно прямолинейно: создаем читабельную временную метку, создаем папки, копируем по scp, рарим. В случае ошибки останавливаемся на паузу. Приведенный ниже пример сохранит настройку bind9 (/etc/bind/named.conf.local) и папку с файлами зон(/etc/bind/zones/):

::::SITE: ec2
::::SERVER: bind-01
::::SERVICE: srv-bind
::::Backup path: C:Backupsec2bind-01srv-bind
::::RSA key: C:Usersusernamekeysbind-01bind-01_username.ppk
::::Path to backup tool: "C:Program Files (x86)Puttypscp"
::::PSCP options: -scp -r(for dirs) -i <key> -p <port> -l <user>
::::Backuping files: /etc/bind/named.conf.local
::							
::::Backuping dirs: /etc/bind/zones
::						

@ECHO off

	::Making time stamp
set MYTIME=%TIME:~0,5%
set SAVESTAMP=%DATE:/=-%@%MYTIME::=-%
ECHO Current time stamp: %SAVESTAMP%
ECHO.

	::Making directories
ECHO Making directories..
mkdir C:Backups
mkdir C:Backupsec2
mkdir C:Backupsec2bind-01
mkdir C:Backupsec2bind-01srv-bind
mkdir C:Backupsec2bind-01srv-bind%SAVESTAMP%
mkdir C:Backupsec2bind-01srv-bind%SAVESTAMP%etc
mkdir C:Backupsec2bind-01srv-bind%SAVESTAMP%etcbind
ECHO.

	::Backup files
ECHO Backuping /etc/bind/named.conf
"C:Program Files (x86)Puttypscp" -scp -i C:Usersusernamekeysbind-01bind-01_username.ppk -P 4213 -l username bind-01.domain.net:/etc/bind/named.conf.local C:Backupsec2bind-01srv-bind%SAVESTAMP%etcbind
if errorlevel 1 pause
ECHO.

	::Backup dirs (-r option in pscp)
ECHO Backuping /etc/bind/zones
"C:Program Files (x86)Puttypscp" -scp -r -i C:Usersusernamekeysbind-01bind-01_username.ppk -P 4213 -l username bind-01.domain.net:/etc/bind/zones C:Backupsec2bind-01srv-bind%SAVESTAMP%etcbind
if errorlevel 1 pause
ECHO.

	::Raring (max compression, no base folders, no messages)
ECHO Raring..
"C:Program FilesWinRARRar.exe" a -m5 -ep1 -inul C:Backupsec2bind-01srv-bind%SAVESTAMP%.rar C:Backupsec2bind-01srv-bind%SAVESTAMP%
ECHO.
ECHO All Done! End.
ECHO.

pause

На выходе получаем папку %SAVESTAMP% (напр., 09.10.2012@23-06) и файл %SAVESTAMP%.rar.

Осталось модифицировать для всех остальных конфигов, контентов. Опять же, именуем вдумчиво, чтобы при необходимости легко находить среди десятков других скриптов. Запускаем до или после каких бы то ни было изменений. Объединив все скрипты служб, бэкапим все настройки сервера. На этом все, буду раз комментариям, дополнениям, другим решениям.

Автор: alprin

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js