diff options
| author | Paul Buetow <paul@buetow.org> | 2026-07-10 09:24:56 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-07-10 09:24:56 +0300 |
| commit | 2f5b1fa3df0b49c5453aee19520e9a090794d044 (patch) | |
| tree | 8c188e9bf1eaecb1c112a71bf4f4d9fb59776c0e /frontends/scripts/dserver-update-key-cache.sh.tpl | |
| parent | 03779322f5d8f1130ec1352ee9f0d2de69881b3b (diff) | |
packages+frontends: dtail packaging follow-ups (vs0 review items)
- dtail-freebsd.json.tpl: move HostKeyFile from volatile
/var/run/dserver/cache to persistent /var/db/dserver/ssh_host_key —
FreeBSD's cleanvar purges /var/run at boot, so the host key was
regenerated on every reboot (mirrors the NetBSD/OpenBSD templates)
- dserver-freebsd.tpl rc.d: start_precmd now creates /var/db/dserver
(0700, dserver-owned) and re-runs dserver-update-key-cache.sh on
every start, so the volatile key cache repopulates right after a
reboot or restart instead of waiting for the daily periodic job
- packages/Makefile: .SHELLFLAGS gains -o pipefail — the
"git archive | ssh ... tar" pipeline could mask a git archive
failure as long as tar succeeded on the truncated stream (the only
recipe-level pipeline; $(shell ...) calls are unaffected)
- packages/Makefile: OS-suffixed /tmp staging names for the OpenBSD
and NetBSD dtail tgz (dtail-openbsd-*/dtail-netbsd-*) — a dash-less
version would have made both targets stage to the same
/tmp/dtail-<version>.tgz locally and on f0; the final repo copy
keeps the canonical dtail-<version>.tgz name
- dserver-update-key-cache.sh.tpl (OpenBSD): port the NetBSD
hardening — quote all variable expansions, derive the user via
basename suffix stripping instead of cut -d. -f1 (dotted usernames
broke), fix the obsolete-cachefile echo that used single quotes and
never interpolated $cachefile, add a header comment documenting the
rc_pre and /etc/daily.local call sites
- dserver.tpl (OpenBSD rc.d): replace 'rc_cmd $1 &' with rc_bg=YES and
a plain rc_cmd "$1" — the daemon needs backgrounding because it does
not daemonize, but backgrounding the whole rc framework made rc_pre
failures and the start result invisible to rcctl; rc_bg is rc.subr's
supported way to background only the daemon
- dserver-update-key-cache-freebsd.sh.tpl: header now documents the
new rc.d start_precmd call site
Deployed: FreeBSD pkg republished, f0/f1/f2 upgraded with host key
migrated to /var/db/dserver first (sha256 verified identical); f3
unreachable, still on the old package. OpenBSD pkg republished,
fishfinger reinstalled + restarted, host key unchanged, dcat verified.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Diffstat (limited to 'frontends/scripts/dserver-update-key-cache.sh.tpl')
| -rw-r--r-- | frontends/scripts/dserver-update-key-cache.sh.tpl | 31 |
1 files changed, 16 insertions, 15 deletions
diff --git a/frontends/scripts/dserver-update-key-cache.sh.tpl b/frontends/scripts/dserver-update-key-cache.sh.tpl index 86b5ecf..fc6bf9e 100644 --- a/frontends/scripts/dserver-update-key-cache.sh.tpl +++ b/frontends/scripts/dserver-update-key-cache.sh.tpl @@ -1,4 +1,8 @@ #!/bin/ksh +# Refresh the dserver SSH key cache from user authorized_keys files. +# OpenBSD variant: called from the dserver rc.d rc_pre (because /var/run is +# wiped by /etc/rc at boot) and from a daily /etc/daily.local entry added by +# the Rex 'dtail' task — see the pkgrepo skill's dtail-package.md. CACHEDIR=/var/run/dserver/cache DSERVER_USER=_dserver @@ -7,27 +11,24 @@ DSERVER_GROUP=_dserver echo 'Updating SSH key cache' ls /home/ | while read remoteuser; do - keysfile=/home/$remoteuser/.ssh/authorized_keys + keysfile="/home/$remoteuser/.ssh/authorized_keys" - if [ -f $keysfile ]; then - cachefile=$CACHEDIR/$remoteuser.authorized_keys + if [ -f "$keysfile" ]; then + cachefile="$CACHEDIR/$remoteuser.authorized_keys" echo "Caching $keysfile -> $cachefile" - cp $keysfile $cachefile - chown $DSERVER_USER:$DSERVER_GROUP $cachefile - chmod 600 $cachefile + cp "$keysfile" "$cachefile" + chown "$DSERVER_USER:$DSERVER_GROUP" "$cachefile" + chmod 600 "$cachefile" fi done -# Cleanup obsolete public SSH keys -find $CACHEDIR -name \*.authorized_keys -type f | -while read cachefile; do - remoteuser=$(basename $cachefile | cut -d. -f1) - keysfile=/home/$remoteuser/.ssh/authorized_keys - - if [ ! -f $keysfile ]; then - echo 'Deleting obsolete cache file $cachefile' - rm $cachefile +# Remove stale cache entries for users whose authorized_keys no longer exist +find "$CACHEDIR" -name '*.authorized_keys' -type f | while read cachefile; do + remoteuser=$(basename "$cachefile" .authorized_keys) + if [ ! -f "/home/$remoteuser/.ssh/authorized_keys" ]; then + echo "Deleting obsolete cache file $cachefile" + rm "$cachefile" fi done |
