0 Голосов

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

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

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

Сводка

Подробности

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