feat: Web Terminal in OPNsense TunnelTab; README auf Multi-Platform aktualisiert (OPNsense + Linux/Proxmox)

This commit is contained in:
cynfo3000 2026-03-07 00:36:54 +01:00
parent cb5922714c
commit b4caf498a0
2 changed files with 35 additions and 6 deletions

View File

@ -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)

View File

@ -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 (
<div className="space-y-4">
{terminalOpen && (
<TerminalModal agentId={agentId} agentName={agent?.name} onClose={() => setTerminalOpen(false)} />
)}
{/* Quick Buttons */}
<div className="flex items-center gap-3">
<div className="flex items-center gap-3 flex-wrap">
<span className="text-sm text-gray-400">Schnellzugriff:</span>
<button
onClick={() => openTunnel('127.0.0.1', 4444, 'webgui')}
@ -923,6 +929,13 @@ function TunnelTab({ agentId, agent }) {
<Terminal className="w-4 h-4" />
{creating === 'ssh' ? 'Verbinde...' : 'SSH (22)'}
</button>
<button
onClick={() => setTerminalOpen(true)}
className="flex items-center gap-1.5 px-3 py-1.5 bg-green-700 hover:bg-green-600 rounded text-sm text-white transition-colors"
>
<Terminal className="w-4 h-4" />
Web Terminal
</button>
<button
onClick={() => setCustomOpen(!customOpen)}
className="flex items-center gap-1.5 px-3 py-1.5 bg-gray-700 hover:bg-gray-600 rounded text-sm text-gray-300 transition-colors"