This is a pretty dense area of tools available for this type of task. As you've mentioned you can essentially roll your own with simple shell scripting all the way up to a configuration management tool such as cfengine or puppet.
I'd be inclined to start simple and roll my own shell scripts and then move up to one of the dedicated systems for performing this.
Doing it this way will allow you to get a good grasp of your needs before you try biting off a setup such as Puppet, for example.
There's a pretty good list of these types of tools over on Wikipedia: Comparison of open-source configuration management software.
These are tools that I've used in the past which work well and have varying degrees of difficulty in getting them setup and running.
Of the above mentioned I've used most of them and can say that probably Capistrano and/or Chef would be good to get started with. But as I said, I'd probably do the shell scripts approach first, and then start thinking about one of these solutions longer term.
lighter weight options
If the above options are still too heavy there is also tools such as myrpm. It's essentially a frontend for
ssh but it allows you to operate on a group of servers that you configure in a text file.
myrpm gives you commands such as:
These allow you to push
ssh keys to the various hosts, push files to them, kick off remote commands to the servers, and kick off one-time commands such as
yum -y update.