DT Wiki

Вступление

Для чего это вообще нужно?
Причины могут быть разные, backup например или что то ещё, в моём случае была необходимость поставить простенький комп с Windows, на котором в последствии записывались бы флешки с образами готовых терминалов, не буду вдаваться в подробности. В общем подходит сотрудник к компу, вставляет в него флешку, запускает програмку для записи, а в списке выбора образа всегда 3 самых последних версии, которые автоматически обновляются с удаленного ресурса на котором крутиться Linux и есть SSH доступ.
Ну поехали


Tabs


Windows 7

Шаг 1. Установка дополнительных утилиток

На Виндовой машине необходимо скачать и установить програмку с названием Cygwin, скачать можно на офицальном сайте, ссылка здесь. Скачиваем и запускаем процесс установки

setup1.png

Жмем Next>

Далее оставляем все по умолчанию, выбираем любой сервер и когда доходим до выбора пакетов, разворачиваем вкладку Net

setup-net.png

Выбираем openssh и rsync для установки

setup-net-selection.png

Затем разворачиваем вкладку ***Shells*** и выбираем ***bash***

setup-shells-selection.png

Шаг 2. Генерация SSH ключей в Cygwin

Запускаем Cygwin и в окне програмы запускаем команду:

ssh-keygen -t rsa -b 2048

Нажимаем Enter для принятия условий по умолчанию и оставляем passphrase пустой

cygwin-ssh-keygen.png

### Шаг 3. Создание пользователя на удаленной Linux машине.

Подключаемся к удалённой Linux машине через ssh (в примере IP будет 192.168.0.108)

ssh remuser@192.168.0.108

Создаём нового пользователя для нашей задачи

sudo adduser

add-backup-user.png

Вводим свой пароль и когда нас попросят ввести "New password" вводим пароль для нового пользователя, затем вводим его ещё раз и на вопрос "Is the information correct? Y/n", отвечаем положительно.
Чтобы убедиться, что все папки созданы правильно, залогинемся пользователем backupuser и сгенертруем пару ключей такой же командой

su backupuser
ssh-keygen -t rsa -b 2048

remote-key-creation.png

ШАГ 4. Перенос публичного ключа на Linux машину

Возвращяемся на Windows машину и выпоняем последовательно несколько команд

cd ~/.ssh
cp id_rsa.pub authorized_keys
scp authorized_keys backupuser@192.168.0.108:~/.ssh

cd ~/.ssh - Переходим в каталог с ключами
cp id_rsa.pub authorized_keys - Копирум файл id_rsa.pub с новым именем authorized_keys
scp authorized_keys backupuser@192.168.0.108:~/.ssh - кjпируем переименованный файл на удаленную Linux машину в домашний каталог пользователя backupuser, точнее в каталог .ssh в домашнем каталоге.

copy-key-to-remote.png

Проверим подключение

ssh backupuser@192.168.0.108

check-connection.png

Если все сделано правильно, мы залогинемся на удаленую машину не вводя пароль пользователем backupuser.
Создадим каталог, куда будут складываться будующие архивы с резервными копиями.

mkdir -p backup

Возвращаемся назад

exit

ШАГ 5. Создаем необходимые папки и задание для резервного копирования

На машине с Windows создаем папку,куда будем складывть наши файлы, в этом примере будут сохраняться zip архивы с именем начинающимся на backup, при чем хранить мы будем последние 5 файлов
Создаём папку backup внутри домашнего каталога Cygwin

back-folder-creation.png

В папке C:\cygwin64\bin создадим файл backup.sh и наполним его содержимым

rsync -rut -v --progress backupuser@192.168.0.108:~/backup/* /backup

ВАЖНО!
Строка должна быть одна, ни каких переносов строки, иначе Cygwin будет создавать ещё одну папку с названием "backup^M$"
Либо создавать файл на машине с Linux и потом его переносить в домашний каталог Cygwin

Затем здесь же содадим ещё один файл backup.cmd

C:\cygwin64\bin\bash.exe --login -i '/bin/backup.sh'
cd C:\cygwin64\backup
for /f "skip=3 eol=: delims=" %%F in ('dir /b /o-d /a-d *.zip') do @del "%%F"

Параметр skip=3 отвечает за количество сохраняемых копий, в нашем случае это 3 последних файла

Ну вот собственно и все, осталось создать задачу в планировщике, но об этом много статей на просторах интернета

И самое главное, исходная статья, которая помогла мне в реализации данной задачи находиться здесь