# Собственный сервер Резервное копирование в папку на компьютере, которым вы управляете сами, по SSH. Подойдёт сервер на Linux, NAS, Raspberry Pi, VPS, а также Mac или компьютер с Windows, на котором включён SSH-сервер. Frost использует SSH-клиент, который уже есть на вашем компьютере, поэтому на сервер ничего устанавливать не нужно. ## Перед началом - На сервере должны быть включены SSH и SFTP. На большинстве серверов с Linux есть и то и другое. На NAS ищите их в настройках терминала или файловых служб. - Нужна учётная запись на сервере, которая может записывать в выбранную папку. Хорошо завести отдельную учётную запись только для копий. - В Windows должен быть установлен клиент OpenSSH. Обычно он уже есть. Если нет, добавьте его в «Параметрах», в разделе «Система > Дополнительные компоненты». ## В мастере настройки Выполните `frost init` и выберите **Self-hosted**. | Вопрос мастера | Ответ | | --- | --- | | What is the server SSH address? | Пользователь и хост, например `me@nas.local`, или `Host` из вашей конфигурации SSH. Добавьте `:2222`, если порт другой | | Which folder on the server? | По умолчанию `frost`, в вашей домашней папке на сервере. Полный путь вроде `/srv/backups/frost` тоже подойдёт | Если последней папки в пути нет, мастер создаст её. Папка, в которой она лежит, должна уже существовать. ## SSH-ключ Frost Frost использует собственный ключ SSH, который мастер создаёт при первой настройке. Личные ключи и SSH-агент ему не нужны. Frost никогда не запрашивает пароль, поэтому запланированные копии всегда создаются с тем же способом входа. Сервер пока не знает ключ Frost, поэтому в первый раз мастер спрашивает, как его добавить: - **Add it for me** (добавить за меня) передаёт терминал ssh. При первом подключении к серверу ssh показывает его отпечаток и спрашивает, доверяете ли вы ему. Затем он запрашивает ваш пароль на сервере, добавляет ключ Frost, и мастер продолжает работу. Пароль получает только ssh. Frost его не видит и не хранит. - **I'll add it myself** (добавлю сам) показывает, где лежит файл открытого ключа Frost. Добавьте строку из этого файла в `~/.ssh/authorized_keys` на сервере и нажмите `[enter]`. | Компьютер | Открытый ключ Frost | | --- | --- | | macOS и Linux | `~/.config/frost/ssh/frost_ed25519.pub` | | Windows | `%AppData%\frost\ssh\frost_ed25519.pub` | Когда ключ добавляет мастер, строка начинается с `restrict`. Это отключает перенаправление соединений и выделение терминала, но Frost по-прежнему может читать и записывать файлы. Выполнение команд оболочки остаётся возможным, если сервер не ограничивает учётную запись протоколом SFTP. ### Добавить ключ вручную В macOS или Linux эта команда добавляет ключ с `restrict` в начале и запрашивает ваш пароль на сервере: ```sh (printf 'restrict '; cat ~/.config/frost/ssh/frost_ed25519.pub) | ssh me@nas.local 'umask 077; mkdir -p .ssh; cat >> .ssh/authorized_keys' ``` Некоторые NAS также позволяют вставить SSH-ключ в настройках вашей учётной записи. Сервер с Windows хранит ключи в других местах, поэтому **Add it for me** на нём не работает. Добавьте строку в `C:\Users\\.ssh\authorized_keys` для обычной учётной записи или в `C:\ProgramData\ssh\administrators_authorized_keys` для администратора. ## Порты и конфигурация SSH Frost читает настройки SSH из `~/.ssh/config`, как и ssh. Запись `Host` может задавать пользователя, порт и другие параметры. Её имя можно указать вместо адреса. Frost передаёт собственный ключ, но SSH также может предложить ключи из явно заданных записей `IdentityFile` в вашей конфигурации. ## Полезно знать - Файловая система сервера должна поддерживать жёсткие ссылки. С их помощью Frost гарантирует, что два компьютера никогда не перезапишут служебные записи копий друг друга. Они есть в ext4, Btrfs, XFS, ZFS, APFS и NTFS. Мастер проверяет это при подключении. - Если ключ хоста сервера изменился, Frost отказывается подключаться, так же как ssh. Если вы переустановили сервер, удалите его старый ключ командой `ssh-keygen -R ` и снова выполните `frost init`. - `frost status` показывает, насколько заполнен диск сервера, а `frost backup` предупреждает, когда он почти заполнен. - Если папка лежит на диске, который сервер монтирует, этот диск должен быть смонтирован во время копирования. Если папки нет на месте, копирование завершается ошибкой, а не записывает данные куда-то ещё.