feat: add interactive terminal support for containers via WebSocket
All checks were successful
Build and Push Docker Images / docker (push) Successful in 30s

- Implemented WebSocket endpoint for executing interactive shells in Docker containers.
- Added ticket-based authentication for terminal access to enhance security.
- Updated frontend to support terminal interactions, including lazy loading of terminal components.
- Enhanced backend to manage terminal session tickets and settings for enabling/disabling terminal access.
- Updated Nginx configuration to support WebSocket connections for terminal sessions.
- Added necessary dependencies for terminal functionality in the frontend.
- Improved user interface to include terminal access controls and feedback on terminal status.
This commit is contained in:
jeanotx32
2026-08-01 01:49:26 -04:00
parent f37b639226
commit e277e99155
15 changed files with 732 additions and 24 deletions

View File

@@ -140,6 +140,7 @@ Le fichier `.env` supporte les variables suivantes :
|----------|--------|-------------|
| `AGENT_API_KEY` | *(généré)* | Clé secrète partagée avec le backend |
| `AGENT_PORT` | `8001` | Port TCP d'écoute |
| `AGENT_MAX_EXEC_SESSIONS` | `10` | Nombre de terminaux ouverts simultanément (voir ci-dessous) |
Pour modifier la configuration sans réinstaller :
@@ -150,6 +151,41 @@ sudo systemctl restart vps-monitor-agent
---
## Terminal interactif (agent 1.3.0+)
Depuis la version 1.3.0, l'agent expose un WebSocket `/containers/{id}/exec` qui
ouvre un shell dans un conteneur, l'équivalent de `docker exec -it <conteneur> bash`
(repli automatique sur `sh` si l'image n'a pas bash). L'interface web s'en sert
pour le bouton « terminal » de chaque conteneur démarré.
À savoir :
- **Réservé aux administrateurs.** Le backend n'ouvre le WebSocket que pour un
compte de rôle `admin`, après échange du JWT contre un ticket à usage unique
valable 60 secondes — le jeton d'authentification ne transite donc jamais en
query string.
- **Désactivable** globalement depuis *Administration → Paramètres → Terminal des
conteneurs*.
- **Portée réelle des droits** : le shell s'exécute avec l'utilisateur par défaut
de l'image, souvent `root` *dans le conteneur*. Un conteneur privilégié ou avec
le socket Docker monté permet d'atteindre l'hôte — n'ouvrez ce droit qu'à des
comptes de confiance.
- **Mise à jour** : bouton « Mettre à jour l'agent » dans l'interface, ou
`sudo bash install.sh --update`. Les agents < 1.3.0 affichent un bouton terminal
désactivé expliquant qu'une mise à jour est nécessaire.
Si l'interface est servie derrière un reverse proxy maison (autre que le nginx
fourni), pensez à y relayer les WebSockets :
```nginx
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 3600s;
```
---
## Dépôt source
[https://git.jeanbonapp.com/jeanbon/ScriptVPS](https://git.jeanbonapp.com/jeanbon/ScriptVPS)