В этой инструкции мы настроим автоматическую отправку файлов бэкапов с сервера Windows на удаленный SFTP-сервер. Этот метод надёжен, безопасен и не требует использования устаревшего протокола FTP.
Шаг 1: Настройка SFTP-сервера (на базе Linux)
Прежде чем отправлять файлы, нужно подготовить удалённый сервер. Мы создадим специального пользователя с ограниченным доступом и настроим его так, чтобы он мог только загружать файлы в определённую папку.
# Создание папки для бэкапов. Владелец — root, так как это требование безопасности SFTP. sudo mkdir -p /mnt/data/my_backups sudo chown root:root /mnt/data/my_backups # Создание папки, в которую пользователь будет загружать файлы sudo mkdir /mnt/data/my_backups/uploads sudo chown sftp_user:sftp_user /mnt/data/my_backups/uploads # Создание пользователя для SFTP-доступа sudo useradd -m -s /sbin/nologin sftp_user sudo passwd sftp_user
Отредактируйте конфигурационный файл SSH, чтобы ограничить пользователя только SFTP-доступом:
sudo nano /etc/ssh/sshd_config
В конец файла добавьте следующие строки:
Match User sftp_user ForceCommand internal-sftp PasswordAuthentication yes ChrootDirectory /mnt/data/my_backups AllowTcpForwarding no X11Forwarding no
После сохранения изменений перезапустите SSH-сервер:
sudo systemctl restart sshd
Шаг 2: Создание скриптов для Windows
Мы будем использовать WinSCP, так как стандартный PowerShell не поддерживает SFTP. Процесс состоит из двух частей: файла с командами для WinSCP и скрипта PowerShell для его запуска.
Файл с командами WinSCP:
Создайте текстовый файл winscp_commands.txt
в папке, где хранятся бэкапы (например, E:\Backup\
). Вставьте в него следующие строки:
option hostkey "ssh-ed25519 255 YOUR_HOST_KEY_HERE" open sftp://sftp_user:YOUR_PASSWORD@your_server_ip/ cd /uploads/ put "E:\Backup\backup*_*" close exit
Скрипт PowerShell:
Создайте файл run_upload.ps1
в той же папке. Этот скрипт запустит WinSCP и передаст ему файл с командами.
# Путь к исполняемому файлу WinSCP.com $winscp_path = "C:\Program Files (x86)\WinSCP\WinSCP.com" # Путь к файлу с командами WinSCP $script_path = "E:\Backup\winscp_commands.txt" # Путь для лог-файла $log_path = "E:\Backup\winscp_log.log" # Запуск WinSCP и перенаправление вывода в лог-файл & $winscp_path /script=$script_path /ini=nul | Out-File -FilePath $log_path -Append -Encoding UTF8
Шаг 3: Настройка Планировщика заданий Windows
Чтобы автоматизировать процесс, создайте задачу, которая будет запускать ваш скрипт PowerShell по расписанию.
- Откройте Планировщик заданий (Task Scheduler).
- Выберите Создать простую задачу... (Create Basic Task...).
- Укажите имя, например, "Автоматическая отправка бэкапов".
- Настройте расписание (например, "Ежедневно" в 06:00).
- В разделе "Действие" выберите Запустить программу (Start a program).
- Укажите следующие параметры:
- Программа или сценарий:
powershell.exe
- Добавить аргументы (необязательно):
-ExecutionPolicy Bypass -File "E:\Backup\run_upload.ps1"
- Программа или сценарий:
Готово! Теперь ваши бэкапы будут автоматически отправляться на SFTP-сервер в соответствии с настроенным расписанием. В случае ошибок их можно будет найти в лог-файле winscp_log.log
.