Terminal Telemetry - A PyQt6 Terminal Emulator with Device Telemetry
Project description
TerminalTelemetry
A modern, cyberpunk-inspired terminal emulator with integrated network device monitoring capabilities. This application combines terminal functionality with real-time network telemetry in a highly customizable interface.
Installation
From PyPI
pip install TerminalTelemetry
From GitHub
git clone https://github.com/scottpeterman/termtel.git
cd termtel
pip install -r requirements.txt
to launch
python -m termtel.termtel
# or
termtel
Features
-
Modern Terminal Emulator
- Multi-session support with tabbed interface
- Customizable themes (Cyberpunk, Dark Mode, Light Mode, Retro Green, Retro Amber, Neon Blue)
- Session management and quick connect functionality
- Secure credential storage
-
Network Device Telemetry
- Real-time interface utilization monitoring with graphs
- Automatic device type detection
- LLDP/CDP neighbor discovery
- ARP table visualization
- Routing table analysis with prefix lookup
- Support for multiple network operating systems (Cisco IOS, Arista EOS, Cisco NXOS)
-
Security Features
- PBKDF2-HMAC-SHA256 key derivation (480,000 iterations)
- Fernet (AES-128-CBC) encryption with HMAC authentication
- Platform-specific secure storage locations
- Machine-specific binding
- Rate-limited authentication
- Cross-platform secure credential management
- Zero plaintext storage of sensitive data
flowchart TB
subgraph FileSystem ["File System Structure"]
direction TB
ConfigDir["Config Directory\n(.config/Termtel)"] --> SaltFile[".salt file\n(16 bytes random salt)"]
ConfigDir --> CredsFile["credentials.yaml"]
ConfigDir --> KeyringFile["System Keyring\n(machine_id)"]
subgraph CredsYAML ["credentials.yaml structure"]
direction TB
Root["Root"] --> LastMod["last_modified: ISO timestamp"]
Root --> CredsList["credentials: []"]
CredsList --> Cred1["Credential 1\n- host\n- port\n- username\n- encrypted_password\n- display_name\n- uuid"]
CredsList --> Cred2["Credential 2\n..."]
end
end
subgraph Encryption ["Encryption Process"]
direction TB
SaveCred["Save Credentials"] --> CheckLock{"Is Unlocked?"}
CheckLock -->|No| Error["Raise Error"]
CheckLock -->|Yes| Process["Process Each Credential"]
Process --> CopyDict["Create Copy of Credential Dict"]
CopyDict --> CheckPW{"Has Password?"}
CheckPW -->|No| AddToList["Add to Encrypted List"]
CheckPW -->|Yes| EncryptPW["Encrypt Password\n(Fernet)"]
EncryptPW --> Store["Store as UTF-8"]
Store --> AddToList
AddToList --> DumpYAML["Dump to YAML"]
end
subgraph Decryption ["Decryption Process"]
direction TB
LoadCred["Load Credentials"] --> VerifyLock{"Is Unlocked?"}
VerifyLock -->|No| LoadError["Raise Error"]
VerifyLock -->|Yes| ReadYAML["Read YAML File"]
ReadYAML --> ProcessCreds["Process Each Credential"]
ProcessCreds --> CopyCred["Create Copy of Credential"]
CopyCred --> CheckEncPW{"Has Encrypted\nPassword?"}
CheckEncPW -->|No| AddDecList["Add to Decrypted List"]
CheckEncPW -->|Yes| DecryptPW["Decrypt Password\n(Fernet)"]
DecryptPW --> UTF8["Convert to UTF-8"]
UTF8 --> AddDecList
end
subgraph KeyManagement ["Key Management"]
direction TB
MasterPW["Master Password"] --> PBKDF2["PBKDF2-HMAC-SHA256\n(480000 iterations)"]
Salt[".salt file"] --> PBKDF2
PBKDF2 --> DerivedKey["32-byte Derived Key"]
DerivedKey --> FernetKey["Fernet Instance"]
end
KeyManagement -.-> Encryption
KeyManagement -.-> Decryption
Encryption --> FileSystem
FileSystem --> Decryption
Requirements
- Python 3.9 or higher
- PyQt6
- Additional dependencies will be automatically installed
Usage
After installation, you can launch TerminalTelemetry using either of these commands:
# Launch with console
termtel
First Time Setup
-
When first launched, you'll be prompted to create a master password for secure credential storage
- The master password is used with PBKDF2 key derivation
- A unique salt is generated and stored securely
- Credentials are encrypted using Fernet (AES-128-CBC)
-
Credentials are stored securely based on your platform:
- Windows: Uses APPDATA directory and MachineGuid
- macOS: Uses Application Support directory and hardware serial
- Linux: Uses .config directory and machine-id
-
Connect to devices using the connection panel
- Credentials are encrypted at rest
- Session data is protected in memory
- Machine-specific binding prevents credential theft
Theme Selection
The application supports multiple themes which can be selected from the menu:
- Cyberpunk (Default)
- Dark Mode
- Light Mode
- Retro Green
- Retro Amber
- Neon Blue
Development
To set up a development environment:
git clone https://github.com/scottpeterman/termtel.git
cd termtel
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
pip install -e .[dev]
Security Considerations for Development
When contributing, ensure:
- All cryptographic operations use approved algorithms
- Platform-specific code is properly isolated
- Error handling follows security best practices
- Regular security audits are performed
- Dependencies are kept updated
Configuration
The application stores its configuration in platform-specific locations:
Windows: %APPDATA%/TerminalTelemetry/
macOS: ~/Library/Application Support/TerminalTelemetry/
Linux: ~/.config/TerminalTelemetry/
License
This project is licensed under the GNU General Public License v3 (GPLv3).
Author
Scott Peterman (github.com/scottpeterman)
Acknowledgments
- PyQt6 for the GUI framework
- NAPALM for network device interaction
- paramiko for all things SSH
- TextFSM, thanks for the templates
- The open-source community for various supporting libraries
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file TerminalTelemetry-0.9.3-py3-none-any.whl.
File metadata
- Download URL: TerminalTelemetry-0.9.3-py3-none-any.whl
- Upload date:
- Size: 32.3 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.0.1 CPython/3.9.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b563790c57aad5dff502486f24b8ba8136750d13551f6325f1bfd21a1dd63c0d
|
|
| MD5 |
abce5378f5d9707a07d2ddef5b13b777
|
|
| BLAKE2b-256 |
e9ee2ab461f09ee7535ba500948d0176955da7fe2287efe8f772fcb38d63a5e9
|