0 Голосов

Изменения документа Let's Encrypt серты на удалённую ноду

Редактировал(а) Anton Krivchenkov 29.05.2026 13:05

От версии 1.1
отредактировано Anton Krivchenkov
на 27.05.2026 19:05
Изменить комментарий: К данной версии нет комментариев
К версии 3.1
отредактировано Anton Krivchenkov
на 29.05.2026 13:05
Изменить комментарий: К данной версии нет комментариев

Сводка

Подробности

Свойства страницы
Содержимое
... ... @@ -28,6 +28,10 @@
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 +
31 31  ### 2. Настройка sudo без пароля на удалённой машине
32 32  
33 33  Чтобы скрипт не завис в ожидании ввода пароля, на **удалённой машине** (`192.168.1.121`) разрешите пользователю `anton` выполнять `rsync` и `docker` без пароля.
... ... @@ -64,29 +64,27 @@
64 64  
65 65  Создайте файл скрипта, например `/home/anton/sync-certs.sh`:
66 66  
67 -```bash
68 -#!/bin/bash
69 -set -e # Прерывать выполнение при любой ошибке
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)] Синхронизация завершена успешно."
70 70  
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 -
90 90  Сделайте скрипт исполняемым:
91 91  
92 92  ```bash
... ... @@ -124,9 +124,10 @@
124 124  Вы должны увидеть скопированные файлы: `cert.pem`, `privkey.pem`, `fullchain.pem`, `chain.pem`.
125 125  
126 126  > **Почему `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 +
130 130  ---
131 131  
132 132  ## Автоматизация через cron (опционально)
... ... @@ -149,14 +149,14 @@
149 149  
150 150  ## Описание ключей rsync
151 151  
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/`) |
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/`) |
160 160  
161 161  ---
162 162  
... ... @@ -164,21 +164,18 @@
164 164  
165 165  ### Ошибка «No such file or directory» при rsync
166 166  
167 -- Целевая папка на виртуалке ещё не создана. Подключитесь к удалённой машине и выполните:
168 - ```bash
169 - sudo mkdir -p /etc/letsencrypt/live/nextcl.dev0ps.online/
170 - ```
171 -- Затем повторите запуск скрипта.
170 +* Целевая папка на виртуалке ещё не создана. Подключитесь к удалённой машине и выполните:`sudo mkdir -p /etc/letsencrypt/live/nextcl.dev0ps.online/`
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,6 +194,5 @@
194 194  
195 195  ### SSH-подключение зависает / требует пароль
196 196  
197 -- Проверьте доступность хоста: `ping 192.168.1.121`
198 -- Убедитесь, что SSH-ключ добавлен именно пользователю `anton` на удалённой машине, а не `root`.
199 -
197 +* Проверьте доступность хоста: `ping 192.168.1.121`
198 +* Убедитесь, что SSH-ключ добавлен именно пользователю `anton` на удалённой машине, а не `root`.