Homelab Operations & SSH Access
Homelab Operations & SSH Access
How to access and manage the homelab fleet.
SSH Access
- Most CTs accessible via aliases (preferred over raw IPs)
- Key-based auth configured across the fleet
- SSH config generated from inventory:
/root/homelab/inventory/ssh_config.generated - On openclaw (CT124), there is no
~/.ssh/config— use fullssh root@<host>or deploy the generated config
Generated SSH Targets (from inventory)
ssh workhorse # 192.168.0.250 — Proxmox host (GPU compute)
ssh pve # 192.168.0.190 — Proxmox host (general services)
ssh gestalt # 192.168.0.96 — Gestalt CT112 (pve/forge01)
ssh admin01 # 192.168.0.196 — Ansible control node (CT6969)
Note: These entries are in
/root/homelab/inventory/ssh_config.generated. Other CTs (caddy CT118, maplestory CT125, 2004scape CT123) need their IPs discovered and added to inventory before SSH config is generated.
Other Hosts (accessible by IP directly)
ssh root@192.168.0.95 # Grafana CT120
ssh root@192.168.0.139 # Mai-staging CT217
Ansible
- Control node: admin01 (CT6969 on workhorse)
- Inventory:
/root/homelab/hosts.yml generate.pyon admin01 produces configs from inventory
Caddy Deployment Pitfall
Ansible --tags caddy may silently skip (0 tasks) if tag structure doesn’t match. Fallback:
scp generated-caddyfile admin01:/tmp/
pct push 118 /tmp/generated-caddyfile /etc/caddy/Caddyfile
pct exec 118 -- caddy validate --config /etc/caddy/Caddyfile
pct exec 118 -- caddy reload --config /etc/caddy/Caddyfile
Workstation SSH Config Distribution
Bare git repo at admin01:/root/homelab.git tracks:
ssh_config.generatedsetup.shinstallerbin/homelab-syncsync script
On inventory changes:
- Update
hosts.yml - Regenerate config
- Commit and push to bare repo
- Workstations run
homelab-sync
Naming Convention
Always use both node name and alias on first mention:
workhorse/gpu01(.250, 128GB, 3x GPU)pve/forge01(.190, 64GB, RTX 3060)intel1/edge01(.122, OPNsense)