[2026-09-02] eagle: family/how-to/hermes-docker-kraken.md family/how-to/kraken-network.md
This commit is contained in:
@@ -85,6 +85,59 @@ docker compose up -d
|
||||
| `hermes/config/` | `/opt/data` | `HERMES_HOME` — config, sessions, skills, memory |
|
||||
| `/home/kraken/obsidian` | `/vault` | Obsidian vault read/write access |
|
||||
|
||||
## SSH из контейнера → хост (диагностика и фиксы)
|
||||
|
||||
> Перенесено из удалённого скилла `kraken-omv-maintenance` / `kraken-docker-ssh`. Актуальные пути и фиксы для случая, когда `ssh kraken-host` изнутри контейнера `hermes-kraken` не работает.
|
||||
|
||||
**Архитектура**
|
||||
|
||||
```
|
||||
Container (hermes-kraken)
|
||||
uid=10000 (dropped from root by entrypoint)
|
||||
HOME=/opt/data
|
||||
~/.ssh/config = /opt/data/.ssh/config (bind mount from host)
|
||||
/etc/ssh/ssh_config — bind mount (полный /etc/ssh/)
|
||||
|
||||
Host (Kraken RPi5)
|
||||
User kraken (uid=1000) owns /home/kraken/.ssh/
|
||||
/home/kraken/.ssh/id_ed25519 — закрытый ключ (обязательно 600)
|
||||
/home/kraken/.ssh/authorized_keys — должен содержать публичный ключ
|
||||
```
|
||||
|
||||
**Fixed points (НЕ менять)**
|
||||
|
||||
1. В compose **не задавать** `user:`, `entrypoint:`, `HERMES_UID/GID` — entrypoint сам сбрасывает uid (image defaults).
|
||||
2. Публичный ключ на хост один раз: `ssh-copy-id kraken@<host>`.
|
||||
3. Закрытый ключ на хосте **обязан быть 600**: `ssh kraken@<host> "chmod 600 /home/kraken/.ssh/id_ed25519"` — OpenSSH 10.x (Bookworm) отвергает 644.
|
||||
4. В `/etc/passwd` контейнера должен быть `kraken:x:1000` — не выставлять `user:` в compose.
|
||||
5. SSH config обязан лежать в `$HOME/.ssh/config` (`$HOME=/opt/data` → `/opt/data/.ssh/config`).
|
||||
|
||||
**Диагностика по порядку**
|
||||
|
||||
```bash
|
||||
ssh kraken@<host> "echo OK && hostname" # доступен ли хост
|
||||
ssh kraken@<host> "sudo docker ps --filter name=hermes-kraken --format '{{.Names}} {{.Status}}'"
|
||||
# изнутри контейнера на хост (loopback алиас kraken-host)
|
||||
ssh kraken@<host> "sudo docker exec hermes-kraken ssh -o ConnectTimeout=5 kraken-host 'echo HELLO'"
|
||||
# verbose — какие конфиги читает SSH
|
||||
ssh kraken@<host> "sudo docker exec hermes-kraken ssh -v kraken-host 'echo HELLO' 2>&1 | grep -E 'config|debug1.*/ssh|Host|connect|Permission|authenticate|bad|owner' | head -15"
|
||||
ssh kraken@<host> "sudo docker exec hermes-kraken getent passwd 1000" # uid 1000 в passwd?
|
||||
ssh kraken@<host> "sudo docker exec hermes-kraken ls -la /opt/data/.ssh/id_ed25519"
|
||||
ssh kraken@<host> "sudo docker exec hermes-kraken cat /opt/data/.ssh/config"
|
||||
ssh kraken@<host> "sudo docker exec hermes-kraken sh -c 'echo HOME=\$HOME; ls -la \"\$HOME/.ssh/config\"'"
|
||||
```
|
||||
|
||||
**Pitfalls**
|
||||
|
||||
- Не менять `user:` в compose — entrypoint должен стартовать как root, чтобы сделать chown.
|
||||
- Не chown'ить `/opt/data` на `1000:1000` — entrypoint делает `chown -R hermes:hermes` (uid 10000).
|
||||
- Не ставить 644 на закрытый ключ.
|
||||
- НЕ использовать `Include ~/.ssh/config` в системном `/etc/ssh/ssh_config` — OpenSSH не резолвит `~` в системных Include.
|
||||
- Если `$HOME=/opt/data`, а конфиг живёт в `/opt/data/home/.ssh/` — SSH его не прочитает (путь не совпадает).
|
||||
- Может быть несколько пар ключей: bind mount приносит хост-ключ, а агент может иметь свой в `/opt/data/home/.ssh/`.
|
||||
- passwd сбрасывается при пересоздании контейнера.
|
||||
- Полный mount `/etc/ssh/` перезаписывает и host keys тоже.
|
||||
|
||||
## Notes
|
||||
|
||||
- `network_mode: host` — port 8642 is directly on the Kraken host, no port mapping needed
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
title: Kraken Network & Infra
|
||||
created: '2026-05-23'
|
||||
updated: '2026-05-23'
|
||||
updated: '2026-09-02'
|
||||
type: tech
|
||||
namespace: personal
|
||||
tags: [infra, kraken, ssh, wireguard, network]
|
||||
@@ -17,7 +17,20 @@ related:
|
||||
ssh kraken
|
||||
```
|
||||
|
||||
IP: `192.168.1.15` (wlan0, primary). SSH alias `kraken` resolves via `~/.ssh/config`.
|
||||
SSH alias `kraken` resolves via `~/.ssh/config`.
|
||||
|
||||
## Актуальная сеть (проверено 2026-09-02)
|
||||
|
||||
> Оба интерфейса живы. **eth0 — активный uplink** (default route metric 100), wlan0 — fallback (metric 600).
|
||||
|
||||
| Интерфейс | IP | MAC | Uplink role |
|
||||
|---|---|---|---|
|
||||
| **eth0** (Ethernet, Gigabit RPi5 rp1-gem/macb) | `192.168.1.14/24` (DHCP) | `2c:cf:67:64:03:f3` | **primary** — default via `192.168.1.1`, metric 100 |
|
||||
| **wlan0** (WiFi) | `192.168.1.15/24` (DHCP) | `2c:cf:67:64:03:f4` | fallback — metric 600 |
|
||||
|
||||
- Ethernet link: **1000 Mbit/s full duplex** (как и ожидалось для Gigabit-порта RPi5), carrier up, стабильно.
|
||||
- Router/gateway: `192.168.1.1` (`f0:79:59:77:9b:70`). eth0 MAC соответствует static lease в доке [[family/how-to/openmediavault-rpi5|openmediavault-rpi5]].
|
||||
- ⚠️ Ранее эта заметка утверждала «wlan0 = .15 primary» — устарело (см. таблицу выше).
|
||||
|
||||
## WireGuard Topology
|
||||
|
||||
|
||||
Reference in New Issue
Block a user