В этой инструкции мы настроим автоматическую отправку файлов бэкапов с сервера 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 для его запуска.

Совет: Вместо IP-адреса 92.124.137.110 используйте свой IP-адрес, а вместо sftp_user и пароля — свои учётные данные. Также замените ключ хоста на ваш, который можно получить, вручную подключившись к серверу через WinSCP.

Файл с командами 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 по расписанию.

  1. Откройте Планировщик заданий (Task Scheduler).
  2. Выберите Создать простую задачу... (Create Basic Task...).
  3. Укажите имя, например, "Автоматическая отправка бэкапов".
  4. Настройте расписание (например, "Ежедневно" в 06:00).
  5. В разделе "Действие" выберите Запустить программу (Start a program).
  6. Укажите следующие параметры:
    • Программа или сценарий: powershell.exe
    • Добавить аргументы (необязательно): -ExecutionPolicy Bypass -File "E:\Backup\run_upload.ps1"

Готово! Теперь ваши бэкапы будут автоматически отправляться на SFTP-сервер в соответствии с настроенным расписанием. В случае ошибок их можно будет найти в лог-файле winscp_log.log.