On pense souvent à NIM pour effectuer des sauvegardes et des mksysb de serveurs. Mais NIM peut aussi automatiser le déploiement de scripts sur un ou plusieurs serveurs. Il est ainsi possible de définir plusieurs groupes fonctionnels de serveurs auxquels, en fonction des cas, on va pouvoir appliquer des scripts de personnalisation ou de configuration spécifique.
La procédure présentée, va vous ouvrir un monde d'administration qui vous permettra d'éviter les scripts basés sur rsh, ssh, rsync et autres outils.
J'ai pris un exemple qui m'a réellement facilité la vie, celui de la création de comptes locaux sur un grand nombre de serveurs. Le script adduser créé des comptes dont seul le nom, l'id, le descriptif et le password change.
On remarquera au passage l'astuce du chpasswd pour changer un mot de passe.
Les créations de comptes se font en dur à la fin du script.
#!/bin/ksh #============================================================= # adduser via NIM #============================================================= mk_user() { USER=$1 UID=$2 GECOS=$3 PASS=$4 mkdir -p /home/exploit/$USER mkuser id=$UID pgrp=staff groups=staff gecos="$GECOS" home=/home/exploit/$USER $USER chuser registry=files SYSTEM=compat $USER chuser loginretries=0 pwdwarntime=0 account_locked=false minage=0 maxage=0 maxexpired=0 mi nalpha=4 minother=2 mindiff=2 maxrepeats=2 minlen=6 histexpire=0 $USER echo "$USER:$PASS" | chpasswd pwdadm -c $USER } ch_user() { USER=$1 UID=$2 GECOS=$3 PASS=$4 chuser -a gecos=$GECOS $USER } #============================================================= # section à remplir : #mk_user USER UID GECOS PASSWORD #============================================================= mk_user dupont 2110 "dupont" nemours mk_user paris 2140 "paris" hilton mk_user durant 2015 "durant" sortie
Définissez un nom de groupe si ça n'a pas déjà été fait:
#nim -o define -t mac_group -aadd_member=superman -aadd_member=batman -aadd_member=wonderwoman serveurs
Bien sur, si vous ne devez lancer le script que sur une seule machine, vous pouvez utiliser son nom à la place du nom du groupe.
Il faut maintenant définir une ressource script en précisant l'emplacement du script (NIM/scripts/adduser), et un nom de ressource(adduser), puis allouer cette ressource.
#nim -o define -t script -a server=master -a location=/NIM/scripts/adduser adduser #nim -o allocate -a script=adduser serveurs
Lancez l'execution par nim -o cust:
#nim -o cust serveurs +-----------------------------------------------------------------------------+ Initiating "cust" Operation +-----------------------------------------------------------------------------+ Allocating resources ... Initiating the cust operation on machine 1 of 3: superman ... Initiating the cust operation on machine 2 of 3: batman ... Initiating the cust operation on machine 3 of 3: wonderwoman ... +-----------------------------------------------------------------------------+ "cust" Operation Summary +-----------------------------------------------------------------------------+ Target Result ------ ------ superman INITIATED batman INITIATED wonderwoman INITIATED Note: Use the lsnim command to monitor progress of "INITIATED" targets by viewing their NIM database definition.
Le script a été exécuté sur tous les serveurs du groupe défini.