Index <= Méthode de travail / DevOps local => Full Agent + Sandbox SSH
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.
ed25519 sans passphrase (indispensable pour exécution non-interactive).raspoutine dans ~/.ssh/config pour éviter les erreurs et stabiliser lusage.ssh raspoutine "...".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é).
Capture : générateur dextension VS Code (Yeoman). Affichage plein largeur.

```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) ```
<PI_IP> (ex : 192.168.1.103).<PI_USER> (ex : ym).ping <PI_IP>
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.
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 ""
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"
chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
ssh -i "%USERPROFILE%\.ssh\<PROJECT_KEY>" <PI_USER>@<PI_IP> "uname -a"
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.
ssh raspoutine "...".yo code.ssh raspoutine "uname -a"
Validation
Le tool renvoie : SSH command ran successfully + la sortie uname -a.
~/.ssh/config).
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
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).
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"
Host raspoutine HostName <PI_IP> User <PI_USER> IdentityFile C:\Users\<WIN_USER>\.ssh\<PROJECT_KEY> IdentitiesOnly yes
ssh raspoutine "uname -a" ssh raspoutine obbctl info