feat: add interactive terminal support for containers via WebSocket
All checks were successful
Build and Push Docker Images / docker (push) Successful in 30s
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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user