fix
This commit is contained in:
+75
-10
@@ -73,20 +73,83 @@ ssh-copy-id -p "$CORE_PORT" \
|
||||
ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub
|
||||
```
|
||||
|
||||
Не запускайте `ssh-keygen` повторно поверх существующего ключа. Если вход
|
||||
по SSH-паролю отключён, добавьте содержимое `id_ed25519.pub` в
|
||||
`~/.ssh/authorized_keys` выбранного пользователя через существующий доступ
|
||||
и выполните первое подключение вручную с параметром `UserKnownHostsFile` выше.
|
||||
Не запускайте `ssh-keygen` повторно поверх существующего ключа.
|
||||
|
||||
На веб-сервере проверьте, что вход теперь работает без пароля:
|
||||
### Если пользователь допускает только ключ
|
||||
|
||||
На веб-сервере выведите только публичную часть ключа:
|
||||
|
||||
```bash
|
||||
cat /etc/moonwell/ssh-tunnel/id_ed25519.pub
|
||||
```
|
||||
|
||||
В существующей административной SSH-сессии **сервера ядра** замените имя
|
||||
пользователя и вставьте эту строку вместо `ssh-ed25519 AAAA...`:
|
||||
|
||||
```bash
|
||||
TUNNEL_USER=ИМЯ_ПОЛЬЗОВАТЕЛЯ_ТУННЕЛЯ
|
||||
sudo -H -u "$TUNNEL_USER" sh -c '
|
||||
set -eu
|
||||
umask 077
|
||||
mkdir -p "$HOME/.ssh"
|
||||
cat >> "$HOME/.ssh/authorized_keys"
|
||||
chmod 700 "$HOME/.ssh"
|
||||
chmod 600 "$HOME/.ssh/authorized_keys"
|
||||
' <<'KEY'
|
||||
restrict,port-forwarding,permitopen="127.0.0.1:13306" ssh-ed25519 AAAA... moonwell-web-db-tunnel
|
||||
KEY
|
||||
```
|
||||
|
||||
Так файл создаётся от имени самого пользователя. `restrict` отключает
|
||||
дополнительные возможности ключа, а `port-forwarding` разрешает forwarding
|
||||
к указанной в `permitopen` цели. При нестандартном `AuthorizedKeysFile`
|
||||
используйте путь из конфигурации SSH вместо `~/.ssh/authorized_keys`.
|
||||
|
||||
В уже существующем блоке `Match User` этого пользователя проверьте настройки:
|
||||
|
||||
```text
|
||||
Match User ИМЯ_ПОЛЬЗОВАТЕЛЯ_ТУННЕЛЯ
|
||||
PubkeyAuthentication yes
|
||||
AuthenticationMethods publickey
|
||||
PasswordAuthentication no
|
||||
KbdInteractiveAuthentication no
|
||||
AllowTcpForwarding local
|
||||
PermitOpen 127.0.0.1:13306
|
||||
MaxSessions 0
|
||||
```
|
||||
|
||||
`MaxSessions 0` разрешает forwarding и запрещает shell/command-сессии.
|
||||
После изменения SSH-конфига выполните `sudo /usr/sbin/sshd -t`, а при успешной
|
||||
проверке — `sudo systemctl reload ssh` (Ubuntu/Debian). Добавление самого ключа
|
||||
в `authorized_keys` не требует перезагрузки службы.
|
||||
|
||||
### Проверка входа и заполнение known_hosts
|
||||
|
||||
На веб-сервере выполните ручное подключение с forwarding. Оно использует только
|
||||
публичный ключ для входа и допускает подтверждение fingerprint при первом соединении:
|
||||
|
||||
```bash
|
||||
ssh -vNT -p "$CORE_PORT" \
|
||||
-i /etc/moonwell/ssh-tunnel/id_ed25519 \
|
||||
-o BatchMode=no -o IdentitiesOnly=yes -o PreferredAuthentications=publickey \
|
||||
-o PasswordAuthentication=no -o KbdInteractiveAuthentication=no \
|
||||
-o StrictHostKeyChecking=ask -o GlobalKnownHostsFile=/dev/null \
|
||||
-o UserKnownHostsFile=/etc/moonwell/ssh-tunnel/known_hosts \
|
||||
-o ExitOnForwardFailure=yes \
|
||||
-L 127.0.0.1:13307:127.0.0.1:13306 \
|
||||
"$CORE_USER@$CORE_HOST"
|
||||
```
|
||||
|
||||
Сверьте fingerprint с ключом сервера ядра и подтвердите его. В выводе ожидается
|
||||
успешная аутентификация `using "publickey"`; SSH остаётся работающим. Остановите
|
||||
ручную проверку через `Ctrl+C`. Команда `ssh ... true` для пользователя с
|
||||
`MaxSessions 0` не подходит, поскольку командные сессии ему запрещены.
|
||||
Не задавайте `BatchMode=yes` при первоначальном подтверждении нового host key:
|
||||
этот режим отключает взаимодействие с пользователем. Контейнер использует
|
||||
`BatchMode=yes` и строгую проверку уже сохранённого `known_hosts`.
|
||||
|
||||
```bash
|
||||
chmod 600 /etc/moonwell/ssh-tunnel/id_ed25519 /etc/moonwell/ssh-tunnel/known_hosts
|
||||
ssh -p "$CORE_PORT" \
|
||||
-i /etc/moonwell/ssh-tunnel/id_ed25519 \
|
||||
-o IdentitiesOnly=yes -o BatchMode=yes -o StrictHostKeyChecking=yes \
|
||||
-o UserKnownHostsFile=/etc/moonwell/ssh-tunnel/known_hosts \
|
||||
"$CORE_USER@$CORE_HOST" true
|
||||
```
|
||||
|
||||
## 3. Настройки веба
|
||||
@@ -180,4 +243,6 @@ vmangos_characters OK
|
||||
|
||||
Документация: [OpenSSH forwarding](https://man.openbsd.org/ssh),
|
||||
[OpenSSH keepalive](https://man.openbsd.org/ssh_config),
|
||||
[OpenSSH authorized_keys](https://man.openbsd.org/sshd),
|
||||
[OpenSSH server configuration](https://man.openbsd.org/sshd_config),
|
||||
[Docker published ports](https://docs.docker.com/engine/network/port-publishing/).
|
||||
|
||||
@@ -87,6 +87,10 @@ main() {
|
||||
log "Собираю production-образы"
|
||||
prod build app web
|
||||
|
||||
log "Запускаю MySQL сайта"
|
||||
prod up -d mysql
|
||||
wait_for_health mysql
|
||||
|
||||
log "Запускаю новый PHP-FPM"
|
||||
prod up -d --no-deps app
|
||||
wait_for_health app
|
||||
|
||||
Reference in New Issue
Block a user