diff --git a/README.md b/README.md index 65f708b..3558969 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ -# OPNsense RMM System +# RMM System — OPNsense & Linux/Proxmox -Remote Monitoring & Management fuer OPNsense Firewalls. -Go-basierter Agent (v1.0.3) + Backend mit WebSocket-Kommunikation und Session-basierten TCP-Tunneln. +Remote Monitoring & Management fuer OPNsense Firewalls und Linux-Server (Proxmox, Debian, Ubuntu). +Go-basierter Agent + Backend mit WebSocket-Kommunikation, Session-basierten TCP-Tunneln und integriertem Web Terminal. ## Screenshots @@ -38,9 +38,22 @@ Go-basierter Agent (v1.0.3) + Backend mit WebSocket-Kommunikation und Session-ba │ rmm-agent │ Heartbeat │ REST API │ ┌────────────┐ │ rmm-updater │ WebSocket │ WebSocket Hub │◄───────────────│ Frontend │ │ - Collectors │ Binary Msgs │ Tunnel Mgr │ Nginx Proxy │ (React) │ -│ - WS Client │ │ PostgreSQL + │ :80/443 │ .20 │ -│ - Tunnel Mgr │ │ TimescaleDB │ └────────────┘ +│ - WS Client │ PTY-Stream │ PTY Bridge │ :80 │ .20 │ +│ - Tunnel Mgr │ │ PostgreSQL + │ └────────────┘ +│ - PTY Manager │ │ TimescaleDB │ └────────────────┘ └────────────────┘ + ▲ + │ identisches Protokoll + ▼ +┌────────────────┐ +│ Linux Server │ +│ (Proxmox etc) │ +│ rmm-agent │ +│ rmm-updater │ +│ - Collectors │ +│ - PTY Manager │ +│ - PBS Monitor │ +└────────────────┘ ``` ### Tunnel-Flow @@ -104,6 +117,9 @@ Client ──► Backend:ProxyPort ──► WebSocket (Binary) ──► Agent | `tunnel_connect` | TCP-Tunnel zu lokalem Dienst oeffnen | | `tunnel_disconnect` | Tunnel schliessen | | `agent_update` | Agent-Binary remote aktualisieren (Legacy) | +| `pty_start` | Interaktive Bash-Shell (PTY) starten — Web Terminal | +| `pty_stop` | PTY-Session beenden | +| `pty_resize` | PTY-Fenstergroesse anpassen | ## Features (v1.0.3) diff --git a/frontend/src/components/AgentPanel.jsx b/frontend/src/components/AgentPanel.jsx index b9e000b..0a66f7c 100644 --- a/frontend/src/components/AgentPanel.jsx +++ b/frontend/src/components/AgentPanel.jsx @@ -3,6 +3,7 @@ import api from '../api/client' import StatusBadge from './StatusBadge' import { copyToClipboard } from '../utils/clipboard' import { useSettingsStore } from '../stores/settings' +import TerminalModal from './TerminalModal' import { X, Cpu, MemoryStick, HardDrive, Clock, Network, Shield, Route, Globe, Key, Download, Terminal, Wifi, Search, Plus, Trash2, Copy, Check, ExternalLink, Unplug, Plug, MonitorSmartphone, Ban, @@ -835,6 +836,7 @@ function TunnelTab({ agentId, agent }) { const [customPort, setCustomPort] = useState('') const [error, setError] = useState('') const [sshCopied, setSshCopied] = useState(null) + const [terminalOpen, setTerminalOpen] = useState(false) const backendHost = useSettingsStore.getState().getBackendHost() @@ -904,8 +906,12 @@ function TunnelTab({ agentId, agent }) { return (
+ {terminalOpen && ( + setTerminalOpen(false)} /> + )} + {/* Quick Buttons */} -
+
Schnellzugriff: +