prole/prole-db/prole-db-ssh-openbao.sh
chrisfu da2f6600ba feat: infrastructure and installer updates for k3s, OpenTofu, and prole-db
- Add k3s start/stop Ansible playbooks and roles.

- Implement OpenTofu initialization scripts and k8s manifests.

- Update ncurses installer with OpenTofu support and improved k3s integration.

- Add mode support (--mode) to etc/ initialization scripts.

- Update prole-db with recovery, barman objectstore, and SSH OpenBao support.

- Refine k8s manifests for OpenBao and prole-db.
2026-02-05 21:27:18 -08:00

92 lines
2.0 KiB
Bash

#!/usr/bin/env bash
set -Eeuo pipefail
PROLE_USER="${PROLE_USER:-prole}"
TOKEN="${OPENBAO_TOKEN:-}"
TOKEN_FILE="${OPENBAO_TOKEN_FILE:-/run/secrets/openbao_token}"
if [[ -z "$TOKEN" && -f "$TOKEN_FILE" ]]; then
TOKEN=$(cat "$TOKEN_FILE")
fi
if [[ -z "$TOKEN" ]]; then
exit 0
fi
NAMESPACE="${NAMESPACE:-}"
if [[ -z "$NAMESPACE" && -f /var/run/secrets/kubernetes.io/serviceaccount/namespace ]]; then
NAMESPACE=$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace)
fi
OPENBAO_ADDR="${OPENBAO_ADDR:-${PROLE_OPENBAO_URL:-}}"
if [[ -z "$OPENBAO_ADDR" && -n "$NAMESPACE" ]]; then
OPENBAO_ADDR="http://openbao.${NAMESPACE}.svc.cluster.local:8200"
fi
if [[ -z "$OPENBAO_ADDR" ]]; then
exit 0
fi
OPENBAO_SSH_MOUNT="${OPENBAO_SSH_MOUNT:-kv}"
OPENBAO_SSH_PATH="${OPENBAO_SSH_PATH:-prole/${NAMESPACE}/admin}"
if [[ -z "$OPENBAO_SSH_PATH" || "$OPENBAO_SSH_PATH" == "prole//admin" ]]; then
exit 0
fi
response=$(curl -fsS -H "X-Vault-Token: $TOKEN" \
"$OPENBAO_ADDR/v1/${OPENBAO_SSH_MOUNT}/data/${OPENBAO_SSH_PATH}" 2>/dev/null || true)
if [[ -z "$response" ]]; then
exit 0
fi
ssh_key=$(python3 - <<'PY' <<<"$response"
import base64
import json
import sys
try:
payload = json.load(sys.stdin)
except Exception:
sys.exit(0)
data = payload.get("data", {}).get("data", {})
key_b64 = data.get("admin_public_key_b64")
if key_b64:
try:
print(base64.b64decode(key_b64).decode().strip())
sys.exit(0)
except Exception:
pass
for k in ("admin_public_key", "ssh_public_key", "public_key"):
val = data.get(k)
if val:
print(str(val).strip())
break
PY
)
if [[ -z "$ssh_key" ]]; then
exit 0
fi
if ! id -u "$PROLE_USER" >/dev/null 2>&1; then
exit 0
fi
ssh_dir="/home/$PROLE_USER/.ssh"
auth_keys="${ssh_dir}/authorized_keys"
mkdir -p "$ssh_dir"
touch "$auth_keys"
if ! grep -qxF "$ssh_key" "$auth_keys"; then
printf '%s\n' "$ssh_key" >> "$auth_keys"
fi
chown -R "$PROLE_USER:$PROLE_USER" "$ssh_dir"
chmod 700 "$ssh_dir"
chmod 600 "$auth_keys"