sake is a command runner for local and remote hosts. You define servers and tasks in a sake.yaml config file and then run the tasks on the servers.
# Simple ping command
$ sake run ping --tags remote
TASK [ping: ping server] **************
server-1.lan | pong
TASK [ping: ping server] **************
pihole.lan | pong
# Multiple tasks
$ sake run info --all
Server | OS | Kernel
----------+-----------+---------
server-1 | Debian 11 | 5.10.92
pihole | Debian 11 | 5.10.92
# Runtime defined command
sake exec 'sudo apt install rsync' --tags remote
TASK Command ******************************************************************
server-1.lan | Reading package lists...
server-1.lan | Building dependency tree...
server-1.lan | Reading state information...
server-1.lan | rsync is already the newest version (3.2.3-4+deb11u1).
server-1.lan | 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
TASK Command ******************************************************************
pihole.lan | Reading package lists...
pihole.lan | Building dependency tree...
pihole.lan | Reading state information...
pihole.lan | rsync is already the newest version (3.2.3-4+deb11u1).
pihole.lan | 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
$ sake ssh server-1
samir@server-1:~ $