Pour faire court: Big old corporation, beaucoup de serveurs UNIX / Linux.
J'ai hérité de la responsabilité d'un tas de scripts qui sont partis il y a quelques années. L'un d'eux était un script qui serait exécuté tous les X $ mois pour mettre à jour globalement le mot de passe root sur tous nos serveurs.
Le script est un gâchis de Shell Script et Expect, et il fonctionne sur la confiance SSH qui est configurée entre tous nos serveurs et un serveur central de commande et de contrôle.
Le problème est que le script est un gâchis géant. Les commandes Expect essaient de prendre en compte toutes les versions possibles de "passwd" qui existent sur n'importe quelle boîte UNIX / Linux - et elles varient beaucoup.
Alors que nous développons et mettons à niveau une grande partie de notre infrastructure, le script devient vraiment ingérable.
Ma question est: existe-t-il une meilleure façon de procéder? En supposant qu'il existe une confiance SSH déjà établie, quelle est la meilleure façon de changer le mot de passe root sur plus de 3000 serveurs en même temps?
sudo
et éliminer complètement les mots de passe root n'est pas une option, n'est-ce pas?Réponses:
Utilisez Puppet .
Puppet est très flexible, facile à entretenir et utilise SSL. Cela peut sembler un peu exagéré et vous devrez faire un effort supplémentaire pour construire le système Puppet.
Mais. Ce n'est probablement pas la dernière mise à jour de masse que vous ferez sur ces machines. Puppet vous fera gagner du temps lorsque la procédure de mise à jour en masse commencera et que les scripts seront très lisibles / réutilisables.
Au moins, cela a fonctionné pour moi il y a quelques années et je suis toujours en mesure de réutiliser certaines de ces recettes de marionnettes (alias scripts). Je l'ai également utilisé dans des environnements un peu plus petits, assurez-vous simplement que chaque machine a un état connu .
J'ai prouvé à plusieurs reprises (dans de nombreuses entreprises) que tous les scripts de déploiement personnalisés deviennent douloureux après un certain temps ou lorsque ce prochain gars intervient. Et tant que vous portez un téléphone portable, les anciens scripts vous hanteront et vous hanteront.
Si vous pensez que cela semble vraiment bon, voici un excellent tutoriel Puppet avec un environnement virtuel inclus pour vous aider à démarrer.
la source
user{"root":}
pour définir le mot de passe. Utilisez plutôt unexec{"chpasswd -e ..."}
, qui est beaucoup plus sûr.pip install ansible
dans une boîte GNU / Linux, construisez une liste d'hôtes etansible -m user -a "password=$crpyt"
. Aucun agent nécessaire. Gère GNU / Linux, AIX et Solaris prêts à l'emploi.J'ai utilisé le module Perl Authen :: PAM sur Solaris avec beaucoup de succès. Voici un exemple de script:
la source
Si vous pouvez écrire Perl, le module Net :: OpenSSH :: Parallel permet d'écrire des scripts qui effectuent des actions en parallèle sur des hôtes distants via SSH assez facilement.
Il contient un exemple de script pour changer les mots de passe que vous pouvez utiliser comme base. Comme il semble que vous ayez un environnement hétérogène, vous souhaitez regrouper les hôtes par type et utiliser un sous-gestionnaire de dialogue différent pour chacun.
la source
Je ne connais pas "le meilleur", et si c'est possible pour toutes les machines non-Linux * nix de votre mix, mais avez-vous regardé marionnette ou cfengine pour ce genre d'activité?
Il existe également des outils commerciaux (très coûteux) pour la gestion des identités, dont j'ai vu / utilisé dans le passé Oracle Identity Manager et l'équivalent Novel.
la source
Après avoir poursuivi mes recherches, j'ai appris quelques choses ...
D'abord et avant tout, c'est une tâche vraiment ennuyeuse à automatiser, en particulier dans de nombreux environnements différents. La réponse la plus correcte à cette question est probablement celle de @ tomi: utilisez Puppet.
Finalement, j'espère que Puppet gérera l'infrastructure, mais le déploiement sur tous les serveurs UNIX de l'entreprise pour un changement de mot de passe racine n'est pas envisageable en ce moment.
Après avoir lu de nombreuses pages de manuel et beaucoup de Google-fu, j'ai réussi à trouver un script qui parcourt une liste de serveurs cibles, ouvre une connexion SSH et exécute l'un des éléments suivants:
Il fait beaucoup plus que d'exécuter uniquement ces commandes, mais celles ci-dessus sont ce qui fait la magie.
Je ne pouvais pas trouver de moyen simple de changer le mot de passe de manière non itérative sur Solaris - nous avons donc eu recours à la modification
/etc/shadow
à la volée.la source
/dev/null
avant de le faire.Récemment, je l'ai fait en utilisant Bash Script ..
la source
C'est ma solution jusqu'à présent. encore besoin de voir si cela fonctionne sur plusieurs systèmes
la source
Vous pouvez utiliser pdsh pour exécuter votre commande sur plusieurs hôtes en même temps.
la source
passwd
est différent sur les différentes versions mentionnées.pw
pas toujours disponible ....passwd
est toujours interactif pour l'utilisateur.passwd
sur RHEL Linux a au moins un--stdin
paramètreEn plus de la marionnette: SaltStack Une autre approche - automatiser l'exécution en utilisant les bibliothèques SSH soit séquentiellement ou en parallèle en utilisant Fabric http://docs.fabfile.org/en/1.6/ , Capistrano ou similaire qui ne nécessite pas beaucoup de temps / effort pour se déployer.
la source
Deux options:
Utiliser une marionnette
Utilisez run deck. Run deck est un serveur qui vous permet d'exécuter simultanément des commandes sur des centaines de machines. Vous pouvez regrouper des machines en groupes, afin d'exécuter des commandes sur un sous-ensemble de machines uniquement.
http://rundeck.org
la source
Je pense que le format du
/etc/shadow
fichier est assez standard dans les distributions Linux. Pouvez-vous simplement écrire un simple script awk pour mettre à jour le mot de passe.cat /etc/shadow| awk -v pass='NEWPASSHASH' -v now=`date '+%s'` 'BEGIN{ OFS=FS=":"} /^root/ {$2=pass; $3=now} {print}' > /tmp/shadow && mv /tmp/shadow /etc/shadow
Je ferais en sorte de le tester pour ne pas vous verrouiller;)
la source