I sometimes need to a large number of servers one after the other to run a command. For example if we want to see how full the home partition is on all our servers. The command we want to run is the disk free command in human readable format, df -h /home. The first step is to have a text file with a list of servers that you want to connect to.
cat servers.txt
server1
server2
server3
...
Then create a loop to cycle through the list and connect to each in turn and runĀ the command you want.
for i in `cat servers.txt`;do
echo $i;ssh $i "df -h /home"
done
Sometimes when one of your servers is down or disconnected there is a long timeout in establishing the connection ass ssh waits for the tcp connection to fail. You can get around that by using the ConnectTimeout ssh option. This usually run this type of command all on one line.
for i in `cat servers.txt`;do echo $i;ssh -o ConnectTimeout=3 $i "df -h /home";done
Keep in mind that this will connect to the servers in sequence so another approach might be Parallel ssh http://www.theether.org/pssh/ mentioned on David O’Yeats’s podcast http://www.lottalinuxlinks.com, although that is probably not going to be installed by default.