That's what Ansible does, but with a DSL that helps users not shoot themselves in the foot and with scripts that are designed to be idempotent.
Ansible is nice but I like to build my systems the way I like them. Under the hood ansible is just a Python paramiko wrapper anyway. What I like about bash is it’s just there, no need to install anything if you are managing legacy systems
It doesn’t work if the step blocks, needs some error handling, etc. Then comes the fun of writing yet another deployment system that fails to learn from other systems.
Why we keep reinventing wheels in infrastructure management and control beats me
for i in $(cat listofips);do ssh $i “some linuxy thing” ;done