Comment déployer des programmes sur plusieurs machines

J'ai besoin d'installer quelques programmes sur environ 40 machines Kubuntu 13.04, et je voudrais savoir quelles options je dois faire aussi efficacement que possible.

EDIT: J'ai les référentiels déjà définis et les machines sont tous des clones identiques, sans authentification LDAP ou server centralisé.

Tout logiciel de gestion de la configuration fera, c'est ce qu'ils sont, je suggérerais de regarder le chef. Voici le text de présentation de leur page Web:

Chef est une plateforme d'automation qui transforme l'infrastructure en code. Arrêtez de penser en termes de servers physiques et virtuels. Avec Chef, votre véritable atout est le code qui apporte ces servers et les services qu'ils fournissent à la vie. Une infrastructure automatisée peut accélérer votre mise sur le marché, vous aider à gérer l'échelle et la complexité et à protéger vos systèmes.

Que votre réseau soit dans le cloud, sur site ou hybride, Chef peut automatiser la configuration, le deployment et la mise à l'échelle de vos servers et applications, que vous gériez 5 servers, 5 000 servers ou 500 000 servers. Il n'est pas étonnant que Chef ait été choisi par des entresockets comme Facebook et Amazon pour relever des défis vitaux.

cette video vous aidera beaucoup: http://www.youtube.com/watch?v=0UXh5EnFZrM

page d'accueil: http://www.opscode.com/chef/

Pour développer la très bonne réponse de Rahul, vous pouvez configurer un access sans mot de passe à chacune des machines en utilisant cette approche:

  1. installez sshpass sur votre machine locale:

     sudo apt-get install sshpass 

    Cela vous permettra de passer le mot de passe en argument de command line:

      sshpass -p '<password>' ssh user@server 
  2. Créer une key ssh

     ssh-keygen -t rsa 

    Vous pouvez simplifier les choses en autorisant une phrase secrète vide (le rest de cette réponse supposera que vous l'avez fait, faites-moi savoir si vos soucis de security l'interdisent et je modifierai en conséquence).

  3. Créez un file avec toutes les adresses IP qui vous intéressent et leurs noms d'user et passwords respectifs, un par ligne:

     1.2.3.4 bob bobs_password 11.22.33.44 hary harrys_password 

    Maintenant, utilisez sshpass pour copyr vos files de keys et – tant que vous avez utilisé un mot de passe vide – autorisez l'access sans mot de passe à toutes les machines:

     while read ip user pass; do sshpass -p "$pass" ssh ssh-copy-id -i ~/.ssh/id_rsa.pub $user@$ip; done < ips.txt 
  4. Maintenant que vous avez un access sans mot de passe, installez votre logiciel sur chaque machine (ceci suppose que $user puisse exécuter apt-get , en gros, que $user est root ):

      while read ip user pass; do ssh $user@$ip "apt-get install package; done < ips.txt 

Pour un objective à long terme

Si vous voulez un outil d'automation qui vous permet de centraliser la gestion des différentes versions * nix fonctionnant sur votre réseau et de gérer tous les aspects de la configuration que vous pouvez, vous pouvez regarder:

  1. fantoche
  2. chef
  3. cfengine3

Pour un objective à court terme

Si vous voulez une solution temporaire pour installer un package via apt-get ou yum , vous pouvez utiliser shell ou perl, script python.

Si vous avez déjà défini l'authentification sans mot de passe, vous pouvez utiliser le script suivant:

 #!/usr/bin/env bash Servers_list=/opt/servers_list PackageName="package-name" for Host in $(< $Servers_list ) do echo "Installing package on $Host" ssh "${Host}" apt-get -y install "${PackageName}" done 

Si vous n'avez pas d'authentification par mot de passe, vous pouvez utiliser l'outil expect ou le module paramiko en python.