-
v2.2.0 Stable
released this
2026-03-02 22:39:34 +03:00 | 0 commits to main since this release📅 Originally published on GitHub: Mon, 02 Mar 2026 20:08:58 GMT
🏷️ Git tag created: Mon, 02 Mar 2026 19:39:34 GMTV2.2.0 - Security hardening, performance optimizations, and GUI improvements
Security
- SSH Password Exposure - Switched all
sshpass -pcalls tosshpass -e(environment variable)- Passwords no longer visible in
ps auxprocess listing - Applied to all 4 sites in SSH.sh (
__wait_for_ssh__,__ssh_exec__,__scp_send__,__scp_fetch__) - SSHPASS environment variable is unset immediately after each command
- Passwords no longer visible in
- Container Password Exposure - Changed
__ct_change_password__to pipe credentials via stdin- Previously embedded password in
bash -ccommand string (visible in /proc) - Now pipes directly to
pct exec -- chpasswd
- Previously embedded password in
- Guacamole Token Security - Token file now created with restricted permissions
- Directory created with
mkdir -p -m 700, token file set tochmod 600 - Prevents other system users from reading authentication tokens
- Directory created with
- Guacamole API Credentials - Switched to
--data-urlencodefor curl authentication- Prevents special characters in passwords (e.g.,
&,=) from breaking API calls
- Prevents special characters in passwords (e.g.,
- Eval Removal - Replaced
evalwith safer alternatives across 10 sites in 6 files- Command execution contexts now use
bash -cinstead ofeval "$cmd" - ArgumentParser.sh uses
declare -ginstead ofevalfor variable assignment
- Command execution contexts now use
- ArgumentParser Blocklist - Extended reserved variable name list
- Added high-risk names (HOSTNAME, RANDOM, SECONDS, GROUPS, etc.) to prevent overwrites
Fixed
- Filename Typo - Renamed
EnableCPUScalingGoverner.shtoEnableCPUScalingGovernor.sh- Updated all references in CHANGELOG.md, .docs/TODO.md, and internal SCRIPT_NAME
- CreateFromISO Structure - Moved
set -euo pipefailafter header comment block- Added shellcheck source directive for sourced utility files
- RemoveStorage Race Condition - Cached VM/CT config per iteration
- Added
|| continueto skip VMs/CTs deleted between list and config check
- Added
- Locale-Dependent Parsing - Fixed AWK decimal parsing in CreateFromISO.sh
- Added
LC_NUMERIC=Cand comma-to-dot conversion for European locale compatibility
- Added
- GUI Unicode Symbols - Replaced all Unicode checkmarks/crosses with plain text
Changed
- GUI Breadcrumb Navigation - Path display now shows
cc_pve > Storage > Cephstyle - GUI Script Descriptions - Menu listings show inline description extracted from script headers
- GUI Log Level Hint - "Type 'l' to change log level" only shown in remote execution mode
- SSH Error Context - Connection failures now display the SSH error reason at all 7 failure sites
- SSH Keepalive - Added
ServerAliveInterval=5andServerAliveCountMax=3to SSH and SCP - Multi-Node Recovery - Execution summary now lists per-node results with retry option
- Shows
OK: node1 node2andFAIL: node3after multi-remote execution - Prompts to retry only the failed nodes
- Shows
- CreateFromISO ArgumentParser Migration - Replaced
getoptswith__parse_args__- Arguments now use
--vm-name,--iso-url,--vm-storagestyle flags - All 8 arguments optional with interactive fallback preserved
- Arguments now use
Added
- CI Unit Tests - Added unit test stage to
.github/workflows/checks.yml- Runs
Utilities/RunAllTests.shafter static analysis checks
- Runs
- BulkOperations Source Guards - Defensive guards on source calls in BulkOperations.sh
- GUI Update Safety Guard - Validates BASE_DIR before cleanup in
update_scripts() - Documentation - Added
Manuals/README.mdtable of contents and Documentation section in main README
Performance
- FindVMIDFromIP Caching - Config fetched once per VMID instead of 3 times (~67% fewer API calls)
- Double-Sed Consolidation - Merged 9 paired
sed | sedcalls into singlesed -e ... -e ...- Applied to BulkConfigureNetworkBandwidth, BulkConfigureDiskIOPS, BulkConfigureDiskBandwidth
- Bash Builtins - Replaced
echo | trsubprocesses with native${var^^}case conversion- Applied to FindVMIDFromIP, BulkCloneSetIP_Proxmox, BulkReconfigureMacAddresses, Conversion.sh, ChangeAllMACPrefix.sh
- Carriage Return Removal - Replaced
echo | tr -d '\r'with${var//$'\r'/}in GUI.sh
Technical Details
sshpass -ereads fromSSHPASSenvironment variable; inline assignment (SSHPASS=x cmd) used where possibledeclare -grequires Bash 4.2+evalretained in TestFramework.sh (dynamic function stubs) and RemoteExecutor.sh (SSH parameter expansion) - both legitimate uses- Multi-node retry uses recursive
__execute_remote_script__call with filtered target list - FindVMIDFromIP caches both JSON and plain-text config formats per VMID for reuse
--data-urlencodesends each parameter separately, preventing URL parameter injection
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- SSH Password Exposure - Switched all
-
v2.1.9 Stable
released this
2026-02-25 21:18:55 +03:00 | 2 commits to main since this release📅 Originally published on GitHub: Wed, 25 Feb 2026 18:22:16 GMT
🏷️ Git tag created: Wed, 25 Feb 2026 18:18:55 GMTV2.1.9 - Remote execution cancellation, live output streaming, and custom port support improvements
Fixed
- Script Cancellation - Ctrl+C now kills the remote script process via SSH
- Tracks remote PID and sends targeted SIGTERM/SIGKILL on interrupt
- Replaced unsafe
killall/pkillwith process-specific cleanup
- ArgumentParser Hyphenated Flags - Flag names with hyphens now map correctly to variable names
- Converts hyphens to underscores in variable names (e.g.
--my-flag->MY_FLAG)
- Converts hyphens to underscores in variable names (e.g.
- Custom Port Passthrough - Fixed port not being passed through in manual node entry and IP/VMID range flows
Changed
- Live Remote Output - Remote script output now streams directly to terminal
- Replaced deferred log download with real-time
tee-based streaming - Output log still saved locally for review
- Replaced deferred log download with real-time
- Git File Modes - All
.shfiles tracked as executable (100755)
Technical Details
- Added
REMOTE_CURRENT_*tracking globals andremote_pid_filefor targeted cleanup in__remote_cleanup__ __add_remote_target__and__clear_remote_targets__now handle port parameter- Manual node entry prompts for SSH port in GUI single-remote, multi-IP, and multi-VMID flows
- Node selection prompts for SSH port in
__select_nodes__
Issues Fixed
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Script Cancellation - Ctrl+C now kills the remote script process via SSH
-
v2.1.6 Stable
released this
2025-11-25 18:28:35 +03:00 | 7 commits to main since this release📅 Originally published on GitHub: Tue, 25 Nov 2025 15:35:31 GMT
🏷️ Git tag created: Tue, 25 Nov 2025 15:28:35 GMTRelease v2.1.6 - Bug fixes, username support, and validation improvements
Added
- Username Configuration - Support for specifying SSH usernames per node
- Added
usernamefield to nodes.json configuration - Username prompts in all node configuration flows (manual entry, saved nodes, IP ranges, VMID ranges)
- Default username is "root" with option to specify alternatives
- Display format changed to
username@ipthroughout GUI
- Added
- Dependency Checking - Runtime validation before remote execution
__check_remote_dependencies__()function checks for sshpass and jq- Helpful error messages with installation commands for all major distros
- Notes that sshpass is not required when using SSH keys
- Syntax Validation - Basic shell syntax checking added to validation suite
- New Check 1a. in
_RunChecks.shrunsbash -non all .sh files - Catches structural errors and orphaned code blocks
- Shows file names and line numbers for syntax errors
- New Check 1a. in
- Enhanced Source Verification - Improved validation of shellcheck directives
VerifySourceCalls.pynow validates shellcheck comments have matching source statements- Detects orphaned shellcheck directives within 5 lines
- Prevents mismatched documentation and code
Changed
- Remote Execution UI - Scripts hidden in remote mode for better UX
- GUI.sh and CCPVE.sh hidden from root menu when in remote execution mode
- Prevents accidental execution of control scripts on remote nodes
- Scripts still shown in local mode and subdirectories
- README.md - Clarified dependency requirements
- Updated installation command to include
jqandsshpass - Documented that sshpass is only needed for password-based authentication
- Separated build-time tools from runtime dependencies
- Updated installation command to include
Fixed
- Critical: Orphaned Error Handler - Fixed syntax error in
Host/HostInfo.sh- Removed orphaned error handler code block (lines 34-36)
- File had error message without matching source statement
- Bug prevented script execution on remote nodes
- Username Hardcoding - Removed hardcoded "root@" from all remote operations
- Updated all SSH/SCP operations in
RemoteExecutor.shto use configured username __ssh_exec__,__scp_exec__,__scp_exec_recursive__,__scp_download__now accept username parameterConfigManager.shtracks username per node inNODE_USERNAMESassociative array
- Updated all SSH/SCP operations in
- Missing Validation - Syntax check gap closed
_RunChecks.shnever validated basic syntax :C- Now catches structural errors that bash -n would detect
- Prevents orphaned code and malformed control structures from entering repository
Technical Details
nodes.json.template- Added username field with "root" defaultUtilities/ConfigManager.sh- Added NODE_USERNAMES tracking and get_node_username() functionUtilities/RemoteExecutor.sh- All remote operations parameterized with usernameGUI.sh- Dependency checking, username prompts, and script filtering.check/VerifySourceCalls.py- Enhanced shellcheck directive validation.check/_RunChecks.sh- Added Check 1a. for syntax validation
Developer Notes
The orphaned error handler bug existed because:
bash -nsyntax check was not being run in validation suiteDeadCodeCheck.pyonly checks unused functions/variables, not code structureVerifySourceCalls.pydidn't validate orphaned error handlers
The fix adds syntax validation to prevent similar issues...
Commit:
fc91a2dc42Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
- Username Configuration - Support for specifying SSH usernames per node
-
v2.1.4 Stable
released this
2025-11-25 08:18:59 +03:00 | 9 commits to main since this release📅 Originally published on GitHub: Tue, 25 Nov 2025 05:21:54 GMT
🏷️ Git tag created: Tue, 25 Nov 2025 05:18:59 GMTRelease v2.1.4
Version 2.0 is an architectural refactor that provides comprehensive utility frameworks, standardizes script behavior across the entire codebase, and adds remote cluster management capabilities.
Key Improvements:
Unified Utility Framework
- ArgumentParser.sh - Standardized argument parsing with built-in validation, automatic help text generation, and support for common types (vmid, string, integer, boolean, range)
- BulkOperations.sh - Unified framework for bulk VM/LXC operations with consistent error handling, progress reporting, and operation summaries
- Operations.sh (formerly ProxmoxAPI.sh) - Centralized Proxmox API wrapper functions for VM/LXC operations, disk management, and pool operations
- Network.sh - Network utility functions for IP validation, manipulation, and network configuration
- TestFramework.sh - Comprehensive testing framework with unit testing, integration testing, and automated testing
Remote Cluster Management
- Execute scripts on single or multiple Proxmox nodes without re-downloading the repository
- Temporary multi-remote mode supporting IP ranges (192.168.1.100-200) or VMID ranges
- Dual log output with separate
.logand.debug.logfiles for structured logging (local and remote) - Debug flag support (
./GUI.sh -d) for detailed remote execution logging - Interrupt handling (Ctrl+C) cleanly cancels remaining nodes during remote operations
Comprehensive Testing System
- Test suites for all major utility frameworks (_TestArgumentParser.sh, _TestBulkOperations.sh, _TestNetwork.sh, _TestOperations.sh, _TestStateManager.sh)
- RunAllTests.sh for automated test execution across all utilities
- Integration test examples demonstrating proper framework usage
- Unit testing capabilities with assertion functions and result reporting
Script Compliance Standards
- All scripts refactored with consistent headers: shebang -> documentation -> Function Index ->
set -euo pipefail-> code - Standardized
set -euo pipefailfor robust error handling (fixed duplicates and misplaced commands) - All bulk operation scripts (80+ files) migrated to use ArgumentParser and BulkOperations frameworks
- Consistent error handling and user feedback across entire codebase
- Automated source dependency verification with VerifySourceCalls.py
Quality Assurance Tools
- Enhanced .check/_RunChecks.sh with better validation and reporting
- UpdateUtilityDocumentation.py for automatic utility function documentation
- VerifySourceCalls.py with fix mode for adding/removing dependencies and shellcheck directives
- _ScriptComplianceChecklist.md for code quality verification
Cross-Platform GUI Improvements
- Auto-detects package manager (apt, dnf, yum, zypper, pacman) for any Linux distribution
- Polymorphic menu system with centralized common operations (settings, help, back, exit)
- Branch management accessible from all menus
- Simplified navigation with consistent input prompts
- Parameter history with readline shortcuts
New Utility Scripts
- VirtualMachines/Operations/BulkHibernate.sh, BulkSuspend.sh, BulkResume.sh
- VirtualMachines/Hardware/BulkToggleTabletPointer.sh
- VirtualMachines/Storage/BulkConfigureDisk.sh
- Storage/AddStorage.sh (NFS, SMB/CIFS, PBS support)
- Storage/RemoveStorage.sh (safe removal with usage checks)
Commit:
918e79fe6fDownloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
v1.52 Stable
released this
2025-10-06 17:21:51 +03:00 | 27 commits to main since this release📅 Originally published on GitHub: Mon, 06 Oct 2025 14:22:04 GMT
🏷️ Git tag created: Mon, 06 Oct 2025 14:21:51 GMTCommit Message: Merge pull request #18 from coelacant1/testing
Implemented BatchRunCLI for nested calls to virtualized proxmox hosts
Build Number: 52Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-
Source code (ZIP)
mirror of
https://github.com/coelacant1/ProxmoxScripts.git
synced 2026-04-26 09:25:48 +03:00