Files
sic/quotesu/setup.md
T
marfrit 35a8a07152 sic — quoting-proof remote command execution
Client (sic) frames argv as netstrings and pipes it over ssh to a daemon
(sicd) that execvp's it, so no shell re-parses the arguments. exec mode by
default; opt-in sh mode for pipes/redirects/globs. Go client + daemon, Python
reference daemon, design doc, quoting-hell demo, and foreground/background
agent skills.

Renamed from the climcp prototype.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EWpfhDgYNA21tETDP9ueBE
2026-07-19 12:10:51 +02:00

1.9 KiB

quotesu — test target for sicd

Incus container on dcw2 (192.168.88.114), created as the target host for sicd development and quoting-hell demonstrations.

Host facts

Property Value
Host machine dcw2 (192.168.88.114, aarch64, Debian 13)
Container IP 192.168.88.196/24
Network br0 (unmanaged bridge)
Storage usb pool (btrfs, /mnt/usb-noether)
OS Debian 13 "trixie" (arm64)
Incus version 6.0.4
SSH user mfritsche (key auth + passwordless sudo)

Setup steps

# 1. Create container
incus init debian-13 quotesu --storage usb --network br0
incus start quotesu

# 2. Install SSH + user
incus exec quotesu -- apt-get update -qq
incus exec quotesu -- apt-get install -y -qq openssh-server sudo python3
incus exec quotesu -- adduser --disabled-password --gecos "" mfritsche
incus file push ~/.ssh/authorized_keys quotesu/home/mfritsche/.ssh/authorized_keys
incus exec quotesu -- chown -R mfritsche:mfritsche ~mfritsche/.ssh
incus exec quotesu -- chmod 700 ~mfritsche/.ssh
incus exec quotesu -- chmod 600 ~mfritsche/.ssh/authorized_keys
incus exec quotesu -- adduser mfritsche sudo
echo "mfritsche ALL=(ALL) NOPASSWD:ALL" | \
  incus exec quotesu -- tee -a /etc/sudoers.d/mfritsche
incus exec quotesu -- systemctl restart ssh

# 3. Deploy sicd
incus exec quotesu -- mkdir -p /opt/sicd
# Copy ../gateway/sicd to the container, then:
incus exec quotesu -- chmod 755 /usr/local/bin/sicd
incus exec quotesu -- ln -sf /usr/local/bin/sicd /usr/local/bin/sicd

Verification

# Test the gateway
printf '4:exec,2:id,0:,' | ssh quotesu sicd
# → uid=1000(mfritsche) gid=1000(...

DNS note

dcw2 had a broken /etc/resolv.conf (NetworkManager header, no nameservers). Fixed by setting:

nameserver 1.1.1.1
nameserver 192.168.88.1

This was needed for incus image copy images:debian/13 local:... to resolve the image server hostname.