Index <= Work Method / Local DevOps => Full Agent + SSH Sandbox
Operational recap (medium level): SSH non-interactive setup, VS Code “Full Access†agent execution, and applied security guardrails.
ed25519 key without passphrase for non-interactive execution.raspoutine defined in ~/.ssh/config to stabilize commands.ssh raspoutine "..." with user confirmation.obbctl).Note
All commands use placeholders. No private keys, no secrets, no proprietary code.
Example screenshot of the VS Code Extension Generator (Yeoman). Full-width display.
```mermaid flowchart LR A[VS Code Agent (Full Access)] -->|Tool call| B[Shell Tool (VS Code Extension)] B -->|Local exec| C[Windows Shell] C -->|ssh <alias> <cmd>| D[Raspberry Pi (sshd)] D -->|stdout / stderr| C --> B --> A ```
```mermaid sequenceDiagram participant W as Windows participant P as Raspberry Pi W->>P: ping <PI_IP> W->>P: ssh <USER>@<PI_IP> "uname -a" W->>W: ssh-keygen (dedicated key, no passphrase) W->>P: append public key to authorized_keys W->>P: ssh <ALIAS> "uname -a" (non-interactive) ```
<PI_IP>.<PI_USER>.ping <PI_IP>
ssh <PI_USER>@<PI_IP> "uname -a"
ssh-keygen -t ed25519 -f "%USERPROFILE%\.ssh\<PROJECT_KEY>" -N ""
type "%USERPROFILE%\.ssh\<PROJECT_KEY>.pub" | ssh <PI_USER>@<PI_IP> "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
ssh -i "%USERPROFILE%\.ssh\<PROJECT_KEY>" <PI_USER>@<PI_IP> "uname -a"
Host raspoutine HostName <PI_IP> User <PI_USER> IdentityFile C:\Users\<WIN_USER>\.ssh\<PROJECT_KEY> IdentitiesOnly yes
ssh raspoutine "uname -a"
ssh raspoutine ....ssh raspoutine "uname -a"
Validated
The agent receives the SSH output inside the tool response.
IdentitiesOnly yes).obbctl)sudo tee /usr/local/bin/obbctl >/dev/null <<'EOF'
#!/usr/bin/env bash
set -euo pipefail
case "${1:-}" in
info) uname -a ;;
uptime) uptime ;;
*) echo "Usage: obbctl {info|uptime}" ; exit 2 ;;
esac
EOF
sudo chmod +x /usr/local/bin/obbctl
ssh raspoutine obbctl info
// Pseudo-code (shell tool)
if (!cmd.startsWith("ssh raspoutine obbctl ")) {
throw new Error("Rejected: only ssh raspoutine obbctl commands are allowed.");
}
Key hygiene
Never publish private keys. Rotate immediately if a private key is exposed.
ping <PI_IP> ssh <PI_USER>@<PI_IP> "uname -a" ssh-keygen -t ed25519 -f "%USERPROFILE%\.ssh\<PROJECT_KEY>" -N "" ssh raspoutine "uname -a" ssh raspoutine obbctl info