mass.pl is the implementation of a relatively simple idea. Instead
of interactively doing some task on one machine, then duplicating
the effort on N other machines, write a shell script, then scp it
to N machines and execute it as root.
Features
send files to the remote hosts (RPMs or other packages for example)
retrieve files from them (the contents of /etc for example).
can become root via the following methods:
ssh login as root
su
sudo
it also supports not becoming root when it's not necessary
uses ssh 1 or ssh 2 or any other ssh options
named lists of machines which can be comprised of arbitrarily
complex perl expressions
few dependencies on the remote machines, should work on most unix like OSes.
(sic@adm1)($:~/mass)- ./mass.pl --name solaris --script pushsomething --su --sshpass
sudo password:
ssh password:
trying to run pushsomething on 1 machines
test
test
PING test.example.com (10.1.1.10) from 10.1.2.3 : 56(84) bytes of data.
64 bytes from 10.1.1.10: icmp_seq=1 ttl=64 time=0.142 ms
--- test.example.com ping statistics ---
1 packets transmitted, 1 received, 0% loss, time 0ms
rtt min/avg/max/mdev = 0.142/0.142/0.142/0.000 ms
pushsomething 100% |*****************************| 183 00:00
test.txt 100% |*****************************| 15 00:00
sic@test's password: sh-2.05a$ PS1='$ '; PATH=/usr/local/bin:/bin:/usr/bin:/usr/s;export PS1;export PATH
$ sudo -K ; sudo sh
Password:
$ PATH=/usr/local/bin:/bin:/usr/bin:/usr/sbin:/usr/local/sbin:/sbin ; export PATH
$ if [ `id|cut -d ' ' -f 1` = 'uid=0(root)' ]; then PS1='# '; fi
# sh pushsomething && echo script\ done || echo script\ failed
script done
# /bin/rm pushsomething test.txt && echo removed\ pushsomething test.txt
removed pushsomething test.txt
#
1 passed: test
0 failed:
0 fatal errors:
Files
mass.pl names.pl Example machine names file newusers.pl This file creates users on
FreeBSD/OpenBSD, Linux and Solaris and sets up their homedir and
.ssh/authorized_keys files. It works well with mass.pl. userinfo.pl This is the info file used by newusers.pl pushsomething A simple example shell
script showing how to use "# send: " to put some file into
/usr/local/bin with specific modes.