ba5a8c939722c5e0a2c33ae538e0dc6ec53a7fad
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 locally:
bashsshwhiptail- core utilities such as
cat,tee,rm,touch, andmv
Optional log viewer:
$EDITORif it points to an installed command- otherwise one of:
nano,vi,less
Remote hosts must also provide the commands needed by the configured actions, such as:
apt-get, yum, pkg, pacman, apk, docker, docker compose, or reboot.
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%