Изменения документа Let's Encrypt серты на удалённую ноду
Редактировал(а) Anton Krivchenkov 29.05.2026 13:05
От версии 3.1
отредактировано Anton Krivchenkov
на 29.05.2026 13:05
на 29.05.2026 13:05
Изменить комментарий:
К данной версии нет комментариев
К версии 1.1
отредактировано Anton Krivchenkov
на 27.05.2026 19:05
на 27.05.2026 19:05
Изменить комментарий:
К данной версии нет комментариев
Сводка
-
Свойства страницы (1 изменено, 0 добавлено, 0 удалено)
Подробности
- Свойства страницы
-
- Содержимое
-
... ... @@ -28,10 +28,6 @@ 28 28 chmod 600 /home/anton/.ssh/id_ed25519 29 29 ``` 30 30 31 -- перекинь ключ 32 - 33 - ssh-copy-id anton@192.168.1.91 34 - 35 35 ### 2. Настройка sudo без пароля на удалённой машине 36 36 37 37 Чтобы скрипт не завис в ожидании ввода пароля, на **удалённой машине** (`192.168.1.121`) разрешите пользователю `anton` выполнять `rsync` и `docker` без пароля. ... ... @@ -68,27 +68,29 @@ 68 68 69 69 Создайте файл скрипта, например `/home/anton/sync-certs.sh`: 70 70 71 - #!/bin/bash 72 - set -e # Прерывать выполнение при любой ошибке 73 - 74 - # Настройки 75 - # ВНИМАНИЕ: Слэши (/) в конце путей для rsync имеют значение! 76 - SRC="/home/anton/swag_crowdsec/swag/keys/letsencrypt/live/nextcl.dev0ps.online/" 77 - DEST_USER="anton" 78 - DEST_IP="192.168.1.121" 79 - DEST_DIR="/etc/letsencrypt/live/nextcl.dev0ps.online/" 80 - SSH_KEY="/home/anton/.ssh/id_ed25519" 81 - 82 - echo "[$(date)] Запуск синхронизации сертификатов..." 83 - 84 - # Копируем с разыменованием симлинков (-L) и удалением лишнего (--delete) 85 - rsync -avLz --delete --rsync-path="sudo rsync" -e "ssh -i $SSH_KEY" "$SRC" "${DEST_USER}@${DEST_IP}:${DEST_DIR}" 86 - 87 - # Перезапускаем контейнеры на ноде, чтобы они подхватили новые файлы 88 - ssh -i "$SSH_KEY" ${DEST_USER}@${DEST_IP} "cd /opt/remnawave && sudo docker compose restart remnawave-nginx naiveproxy hysteria2" 89 - 90 - echo "[$(date)] Синхронизация завершена успешно." 67 +```bash 68 +#!/bin/bash 69 +set -e # Прерывать выполнение при любой ошибке 91 91 71 +# Настройки 72 +# ВНИМАНИЕ: Слэши (/) в конце путей для rsync имеют значение! 73 +SRC="/home/anton/swag_crowdsec/swag/keys/letsencrypt/live/nextcl.dev0ps.online/" 74 +DEST_USER="anton" 75 +DEST_IP="192.168.1.121" 76 +DEST_DIR="/etc/letsencrypt/live/nextcl.dev0ps.online/" 77 +SSH_KEY="/home/anton/.ssh/id_ed25519" 78 + 79 +echo "[$(date)] Запуск синхронизации сертификатов..." 80 + 81 +# Копируем с разыменованием симлинков (-L) и удалением лишнего (--delete) 82 +rsync -avLz --delete --rsync-path="sudo rsync" -e "ssh -i $SSH_KEY" "$SRC" "${DEST_USER}@${DEST_IP}:${DEST_DIR}" 83 + 84 +# Перезапускаем контейнеры на ноде, чтобы они подхватили новые файлы 85 +ssh -i "$SSH_KEY" ${DEST_USER}@${DEST_IP} "cd /opt/remnawave && sudo docker compose restart remnawave-nginx naiveproxy hysteria2" 86 + 87 +echo "[$(date)] Синхронизация завершена успешно." 88 +``` 89 + 92 92 Сделайте скрипт исполняемым: 93 93 94 94 ```bash ... ... @@ -126,10 +126,9 @@ 126 126 Вы должны увидеть скопированные файлы: `cert.pem`, `privkey.pem`, `fullchain.pem`, `chain.pem`. 127 127 128 128 > **Почему `sudo ls`, а не `sudo cd` + `cat`?** 127 +> - `sudo cd` **не работает** — `cd` это встроенная команда оболочки (shell builtin), а не отдельная программа, которую `sudo` может выполнить с повышенными правами. 128 +> - `cat` предназначен для чтения **файлов**, при попытке применить его к **папке** будет ошибка. Для просмотра содержимого директории используйте `ls`. 129 129 130 -* `sudo cd` **не работает** — `cd` это встроенная команда оболочки (shell builtin), а не отдельная программа, которую `sudo` может выполнить с повышенными правами. 131 -* `cat` предназначен для чтения **файлов**, при попытке применить его к **папке** будет ошибка. Для просмотра содержимого директории используйте `ls`. 132 - 133 133 --- 134 134 135 135 ## Автоматизация через cron (опционально) ... ... @@ -152,14 +152,14 @@ 152 152 153 153 ## Описание ключей rsync 154 154 155 -| Ключ|Назначение|156 -| ---------------------------|------------------------------------------------------------------------------------------------------------|157 -| `-a`|Архивный режим (сохраняет права, владельца, timestamps)|158 -| `-v`|Подробный вывод|159 -| `-L`|**Разыменовывает симлинки** — копирует сами файлы сертификатов, а не ссылки. Критично для Let's Encrypt!|160 -| `-z`|Сжатие данных при передаче|161 -| `--delete`| Удаляет файлы на целевой машине, которых больше нет в источнике (полезно при перевыпуске или смене форматов) |162 -| `--rsync-path="sudo rsync"` | Выполняет rsync от имени root на удалённой машине (нужно для записи в `/etc/letsencrypt/`)|152 +| Ключ | Назначение | 153 +|------|-----------| 154 +| `-a` | Архивный режим (сохраняет права, владельца, timestamps) | 155 +| `-v` | Подробный вывод | 156 +| `-L` | **Разыменовывает симлинки** — копирует сами файлы сертификатов, а не ссылки. Критично для Let's Encrypt! | 157 +| `-z` | Сжатие данных при передаче | 158 +| `--delete` | Удаляет файлы на целевой машине, которых больше нет в источнике (полезно при перевыпуске или смене форматов) | 159 +| `--rsync-path="sudo rsync"` | Выполняет rsync от имени root на удалённой машине (нужно для записи в `/etc/letsencrypt/`) | 163 163 164 164 --- 165 165 ... ... @@ -167,18 +167,21 @@ 167 167 168 168 ### Ошибка «No such file or directory» при rsync 169 169 170 -* Целевая папка на виртуалке ещё не создана. Подключитесь к удалённой машине и выполните:`sudo mkdir -p /etc/letsencrypt/live/nextcl.dev0ps.online/` 171 -* Затем повторите запуск скрипта. 167 +- Целевая папка на виртуалке ещё не создана. Подключитесь к удалённой машине и выполните: 168 + ```bash 169 + sudo mkdir -p /etc/letsencrypt/live/nextcl.dev0ps.online/ 170 + ``` 171 +- Затем повторите запуск скрипта. 172 172 173 173 ### Ошибка «permission denied» при rsync 174 174 175 - *Проверьте, что строка в `sudoers` на удалённой машине корректна и путь к `rsync` совпадает (`which rsync`).176 - *Убедитесь, что целевая директория существует.175 +- Проверьте, что строка в `sudoers` на удалённой машине корректна и путь к `rsync` совпадает (`which rsync`). 176 +- Убедитесь, что целевая директория существует. 177 177 178 178 ### Ошибка «permission denied» при docker compose restart 179 179 180 - *Проверьте, что `/usr/bin/docker` — правильный путь (`which docker` на удалённой машине).181 - *Убедитесь, что строка в `sudoers` разрешает выполнение `docker`.180 +- Проверьте, что `/usr/bin/docker` — правильный путь (`which docker` на удалённой машине). 181 +- Убедитесь, что строка в `sudoers` разрешает выполнение `docker`. 182 182 183 183 ### Контейнеры не подхватывают сертификаты 184 184 ... ... @@ -194,5 +194,6 @@ 194 194 195 195 ### SSH-подключение зависает / требует пароль 196 196 197 -* Проверьте доступность хоста: `ping 192.168.1.121` 198 -* Убедитесь, что SSH-ключ добавлен именно пользователю `anton` на удалённой машине, а не `root`. 197 +- Проверьте доступность хоста: `ping 192.168.1.121` 198 +- Убедитесь, что SSH-ключ добавлен именно пользователю `anton` на удалённой машине, а не `root`. 199 +