3fe795985024477acd60f5b9f95e869ae4c269f7
Use a temporary file to write the summary header and existing log content, then replace the original log atomically. This removes the dependency on sed for summary insertion and avoids unsafe string interpolation.
netupgrade
Interactive CLI tool to run upgrade and maintenance actions on multiple remote hosts over SSH.
Where to use
- On a dedicated server (bastion, jump host, ...)
- On your computer with an alias to your dedicated server
- On your computer directly (not recommended)
Features
- Select one or more hosts from an interactive checklist
- Run predefined actions on each selected host
- Write execution logs to
~/netupgrade.log
Supported actions:
aptyumpkgpacmanapkrebootcmd:<remote command>docker-stacks:<directory>
Requirements
Required:
bashsshwhiptailsedtee- core utilities such as
rmandtouch
Optional log viewer:
$EDITORif it points to an installed command- otherwise one of:
nano,vi,less
Install
Install the executable
cp bin/netupgrade /usr/local/bin/netupgrade
chmod +x /usr/local/bin/netupgrade
Create the config directory
mkdir -p ~/.config/netupgrade
touch ~/.config/netupgrade/index.cfg
Alias on your computer with a dedicated server
You can save it in your .bashrc
alias netupgrade='ssh -t user@10.0.0.10 netupgrade'
Configuration
The default config file is:
~/.config/netupgrade/index.cfg
The script sources this file as Bash code. It must define a NODES array.
Each entry uses this format:
host;display-name;action1;action2;...
Example:
SSH_USER="root"
NODES=(
"192.168.1.10;web-01;apt;reboot"
"192.168.1.11;db-01;apt;cmd:systemctl restart postgresql"
"192.168.1.12;docker-01;docker-stacks:/opt/stacks"
)
Usage
netupgrade [--help] [-f] [-y] [configfilename]
Options:
--help: show help-f: preselect all nodes in the interactive checklist-y: pass non-interactive confirmation flags to supported package managersconfigfilename: path to a config file
Notes
- SSH connections use
root@hostby default and can be changed withSSH_USERin the config file cmd:<remote command>is executed through a remote shell, so shell operators such as pipes, redirections,&&, and||are supported- The tool is interactive and intended for manual administration workflows
- After execution, the log file is opened with
$EDITORwhen available, otherwise withnano,vi, orless - If no supported log viewer is available, the script keeps running and prints the log file path
- The configuration file is sourced as shell code, so only use trusted config files
Languages
Shell
100%