docs(tasks): add task 0019, user SSH keys and an access policy #5
Reference in New Issue
Block a user
Delete Branch "task-0019-user-ssh-keys-and-access-policy"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Task:
.claude/tasks/0019-user-ssh-keys-and-access-policy.mdPlanning only — no configuration changes. Deliberately carries no
specfield.The operator's SSH client key currently exists only as a hand-created file on one laptop, in no secrets file and no module, so a reimage destroys it. That is worse than losing a host key: a lost host key makes clients complain about
known_hosts, while a lost client key locks the operator out of the remote until a new key is generated and registered through the web interface.Per-machine identities, not one shared across the fleet. The private half lives in that machine's own secrets file, so a compromised machine surrenders only its own key and withdrawing access is removing one public key rather than re-keying every other machine.
Access as a role policy, not a per-host list of authorized keys:
So every machine authorizes the workstation keys, servers additionally authorize the server keys, and a workstation never authorizes a server's key — a compromised server cannot reach the operator's own machines. This wants one declaration of the fleet naming each machine's role and public key, so registering a machine is a role declaration rather than an edit to every other host.
Only
neogaiaexists, so the server half has nothing to act on and is recorded rather than exercised.The task adopts the key already on
neogaiainstead of generating a fresh one, since it is already registered with the remote — replacing it would require registering the new key before the old one stops being used, an ordering that locks the operator out if it goes wrong.Blocked by #4, which introduces the per-host secrets file and its recipient rule. It also settles the gap task 0010 left open, where the daemon accepts connections but authorizes no key.
— Claude
cb7cd3d4b0to11d7cb053c