feat(agents): add Agent Authority policy + access bootstrap tooling
Add non-negotiable "Agent Authority" section to AGENTS.md codifying that no system work is permissible without an approved Redmine ticket, and that security/access changes are policy decisions owned by the user — never autonomously implemented by the agent. Also add the access bootstrap toolkit: - agent-bootstrap.sh: in-guest key + sudo setup (localuser sudo only per policy) - bootstrap-all.sh: workstation-side push to remaining NO-KEY systems - access-matrix.sh: full fleet SSH/sudo probe - probe-ssh.sh, probe-ssh-localuser.sh, probe-ga.sh, pivot-probe.sh, ga-push-key.sh: diagnostic scripts used during access audit Refs [#403] 💘 Generated with Crush Assisted-by: Crush:glm-5.2
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
#!/usr/bin/bash
|
||||
# shellcheck disable=SC2016 # intentional: $vars expand in-guest, not locally
|
||||
# ga-push-key.sh — push agent SSH key + NOPASSWD sudo to all GA-OK VMs via guest-agent.
|
||||
# Runs from the workstation, routing each call through remote.sh vm-guest on the VM's host.
|
||||
set -u
|
||||
cd /home/reachableceo/projects/PFVCluster || exit 1
|
||||
|
||||
KEY='ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIWms/uCXnjjo4KyxHBcYI2TDHe8OZ2wle6W/0hSRQLu reachableceo@ultix-streaming'
|
||||
|
||||
INGUEST='for u in root localuser; do getent passwd "$u" >/dev/null || continue; H=$(getent passwd "$u"|cut -d: -f6); mkdir -p "$H/.ssh"; chmod 700 "$H/.ssh"; AK="$H/.ssh/authorized_keys"; touch "$AK"; chmod 600 "$AK"; grep -qF "'"${KEY}"'" "$AK" || echo "'"${KEY}"'" >> "$AK"; chown -R "$u": "$H/.ssh"; done; [ -d /etc/sudoers.d ] && { echo "localuser ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/010-agent; chmod 440 /etc/sudoers.d/010-agent; }; echo PUSHDONE $(hostname)'
|
||||
|
||||
# host:vmid list of GA-OK VMs (excluding pfv-bms=100 policy-excluded, ultix-streaming=5111 self)
|
||||
pairs="
|
||||
pfv-tsys1:101
|
||||
pfv-tsys1:102
|
||||
pfv-tsys1:104
|
||||
pfv-tsys3:313
|
||||
pfv-tsys5:500
|
||||
pfv-tsys5:5000
|
||||
pfv-tsys5:5105
|
||||
pfv-tsys5:5106
|
||||
pfv-tsys5:5107
|
||||
pfv-tsys5:5108
|
||||
pfv-tsys5:5109
|
||||
pfv-tsys5:5112
|
||||
pfv-tsys5:51012
|
||||
pfv-tsys5:51013
|
||||
pfv-tsys5:53100
|
||||
pfv-tsys5:53102
|
||||
pfv-tsys6:600
|
||||
pfv-tsys6:601
|
||||
pfv-tsys6:602
|
||||
pfv-tsys6:603
|
||||
pfv-tsys7:701
|
||||
pfv-tsys7:703
|
||||
pfv-tsys7:705
|
||||
pfv-tsys7:706
|
||||
pfv-tsys9:905
|
||||
"
|
||||
for p in $pairs; do
|
||||
host="${p%%:*}"; vid="${p##*:}"
|
||||
out=$(PROX_HOST="$host" VM_ID="$vid" GUEST_TIMEOUT=120 bash tests/remote.sh vm-guest "$INGUEST" </dev/null 2>&1)
|
||||
printf '%-12s %-6s %s\n' "$host" "$vid" "${out//$'\n'/ | }"
|
||||
done
|
||||
Reference in New Issue
Block a user