www.safezone-fpv.com

Index <= Méthode de travail / DevOps local => Full Agent + Sandbox SSH

Full Agent AI + Sandbox SSH (VS Code Raspberry Pi)

Récapitulatif opérationnel (niveau moyen) : mise en place SSH non-interactif, exécution via Agent Full Access, et garde-fous de sécurité. Commandes détaillées avec placeholders.

1

Résumé (ce quon a fait)

  • Réseau : validation que lhôte distant est joignable (ping OK).
  • SSH : mise en place dune connexion stable vers une Raspberry Pi (port 22).
  • Clé dédiée automation : création dune clé ed25519 sans passphrase (indispensable pour exécution non-interactive).
  • Alias SSH : configuration dun host raspoutine dans ~/.ssh/config pour éviter les erreurs et stabiliser lusage.
  • VS Code : extension / Shell Tool capable dexécuter des commandes (avec confirmation), permettant à lagent dappeler ssh raspoutine "...".
  • Sécurité : réduction de surface (clé dédiée + alias + IdentitiesOnly + confirmation utilisateur). Recommandé : dispatcher obbctl sur le Pi + allowlist côté tool.

Note

Tout est présenté avec placeholders (pas de clés, pas de secrets, pas de code privé).

Illustration (Extension Generator)

Capture : générateur dextension VS Code (Yeoman). Affichage plein largeur.

Visual Studio Code - Extension Generator
2

Diagrammes (Mermaid)

Chaîne dexécution

tapes minimum viable

```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: ssh-keygen (clé dédiée sans passphrase)
  W->>P: installer la clé publique dans authorized_keys
  W->>P: ssh <ALIAS> "uname -a" (non-interactif)
```
participant P as Raspberry Pi W->>P: ping <PI_IP> W->>P: ssh <USER>@<PI_IP> "uname -a" W->>W: ssh-keygen (clé dédiée sans passphrase) W->>P: installer la clé publique dans authorized_keys W->>P: ssh <ALIAS> "uname -a" (non-interactif) ```
3

SSH : setup complet (Windows Raspberry Pi)

3.1 Pré-requis

  • Windows avec OpenSSH client installé (standard sur Windows 10/11).
  • Raspberry Pi accessible sur le LAN : <PI_IP> (ex : 192.168.1.103).
  • Utilisateur sur le Pi : <PI_USER> (ex : ym).

3.2 Vérifier la connectivité réseau

ping <PI_IP>

3.3 Vérifier SSH

ssh <PI_USER>@<PI_IP> "uname -a"

Astuce

Si lIP ne répond pas : corriger lIP (DHCP/routeur), vérifier Wi-Fi/Ethernet, vérifier isolation réseau.

3.4 Créer une clé dédiée automation (sans passphrase)

Objectif : permettre à lagent dexécuter des commandes sans saisie interactive.

ssh-keygen -t ed25519 -f "%USERPROFILE%\.ssh\<PROJECT_KEY>" -N ""

Exemple (nom de clé) :

ssh-keygen -t ed25519 -f "%USERPROFILE%\.ssh\obambou_pi_ed25519" -N ""

3.5 Installer la clé publique sur le Pi

On ajoute la clé publique dans ~/.ssh/authorized_keys (une ligne par clé).

type "%USERPROFILE%\.ssh\<PROJECT_KEY>.pub" | ssh <PI_USER>@<PI_IP> "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"

3.6 Permissions côté Pi (obligatoires)

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

3.7 Test non-interactif (clé dédiée)

ssh -i "%USERPROFILE%\.ssh\<PROJECT_KEY>" <PI_USER>@<PI_IP> "uname -a"

3.8 Alias SSH (évite les erreurs et simplifie lagent)

Créer/éditer C:\Users\<USER>\.ssh\config :

Host raspoutine
  HostName <PI_IP>
  User <PI_USER>
  IdentityFile C:\Users\<WIN_USER>\.ssh\<PROJECT_KEY>
  IdentitiesOnly yes

Test :

ssh raspoutine "uname -a"

Résultat attendu

La commande sexécute sans demander de mot de passe ni passphrase.

4

VS Code : Agent Full Access (via Shell Tool)

4.1 Principe

  • Lagent ne lance pas de commandes système par défaut.
  • Il faut un tool côté extension VS Code (ex : shell tool) qui exécute une commande locale.
  • Le tool affiche une confirmation utilisateur (garde-fou).
  • Ensuite, la commande locale peut appeler SSH : ssh raspoutine "...".

4.2 Démarche (résumé)

4.3 Commande de test agent Pi

ssh raspoutine "uname -a"

Validation

Le tool renvoie : SSH command ran successfully + la sortie uname -a.

5

Sécurité & restrictions (appliquées + recommandé)

5.1 Garde-fous appliqués

  • Clé dédiée automation (ed25519, sans passphrase) : limite limpact sur les clés perso.
  • Alias SSH : réduction des erreurs (IP/user/key figés dans ~/.ssh/config).
  • IdentitiesOnly yes : force lusage de la bonne clé, évite les surprises dagent SSH.
  • Confirmation utilisateur dans le Shell Tool VS Code : empêche lexécution silencieuse.

5.2 Recommandation forte : dispatcher obbctl côté Pi

Objectif : éviter que lagent exécute des commandes arbitraires. On expose un petit API CLI local : obbctl (actions autorisées).

sudo tee /usr/local/bin/obbctl >/dev/null <<'EOF'
#!/usr/bin/env bash
set -euo pipefail

case "${1:-}" in
  info)   uname -a ;;
  uptime) uptime ;;
  # ajouter ici UNIQUEMENT les actions validées
  *) echo "Usage: obbctl {info|uptime}" ; exit 2 ;;
esac
EOF
sudo chmod +x /usr/local/bin/obbctl

Usage (depuis Windows / agent) :

ssh raspoutine obbctl info
ssh raspoutine obbctl uptime

5.3 Recommandation optionnelle : allowlist côté Shell Tool

Renforcer encore : le tool refuse toute commande qui nest pas dans une liste autorisée (par exemple uniquement ssh raspoutine obbctl ...).

// Exemple (pseudo-code)
if (!cmd.startsWith("ssh raspoutine obbctl ")) {
  throw new Error("Refus: seules les commandes ssh raspoutine obbctl ... sont autorisées.");
}

Hygiène clé

Ne jamais publier / copier une clé privée. Si une clé privée a circulé, rotation recommandée (nouvelle clé + suppression de lancienne du Pi).

6

Checklist (copier/coller)

READY

SSH

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"
# sur le Pi:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
# test:
ssh -i "%USERPROFILE%\.ssh\<PROJECT_KEY>" <PI_USER>@<PI_IP> "uname -a"

Alias

Host raspoutine
  HostName <PI_IP>
  User <PI_USER>
  IdentityFile C:\Users\<WIN_USER>\.ssh\<PROJECT_KEY>
  IdentitiesOnly yes

Agent

ssh raspoutine "uname -a"
ssh raspoutine obbctl info