Kurz gesagt: Große alte Firma, viele UNIX / Linux-Server.
Ich übernahm die Verantwortung für eine Reihe von Skripten, die vor einigen Jahren noch verfügbar waren. Eines davon war ein Skript, das alle zehn Monate ausgeführt wurde, um das root-Passwort global auf allen unseren Servern zu aktualisieren.
Das Skript ist eine Mischung aus Shell-Skript und Expect und funktioniert mit der SSH-Vertrauensstellung, die zwischen all unseren Servern und einem zentralen Befehls- und Steuerungsserver eingerichtet wurde.
Das Problem ist, dass das Drehbuch ein riesiges Durcheinander ist. Die Expect-Befehle versuchen, jede mögliche Version von "passwd" zu berücksichtigen, die auf einer UNIX / Linux-Box vorhanden ist - und sie variieren erheblich.
Da wir einen Großteil unserer Infrastruktur erweitern und aufrüsten, wird das Skript wirklich unhandlich.
Meine Frage ist: Gibt es einen besseren Weg, dies zu tun? Angenommen, es gibt bereits eine etablierte SSH-Vertrauensstellung. Wie lässt sich das Root-Passwort auf über 3000 Servern gleichzeitig am besten ändern?
sudo
und Eliminieren von root-Passwörtern ist keine Option, oder?Antworten:
Verwenden Sie Marionette .
Puppet ist sehr flexibel, pflegeleicht und nutzt SSL. Könnte ein bisschen übertrieben klingen und Sie müssen sich zusätzliche Mühe geben, um das Puppet-System aufzubauen.
Aber. Höchstwahrscheinlich ist dies nicht das letzte Massenupdate, das Sie für diese Maschinen durchführen werden. Puppet wird und spart Ihnen viel Zeit, wenn die eigentliche Massenaktualisierung beginnt und Skripte sehr gut lesbar / wiederverwendbar sind.
Zumindest hat das vor ein paar Jahren für mich geklappt und trotzdem kann ich einige dieser Puppet-Rezepte (auch als Skripte bekannt) wiederverwenden. Ich habe es auch in etwas kleineren Umgebungen verwendet, stelle nur sicher, dass jede Maschine tatsächlich einen bekannten Zustand hat .
Ich habe es viele Male (in vielen Unternehmen) bewiesen, dass alle benutzerdefinierten Bereitstellungsskripte nach einer Weile oder wenn der nächste Typ hereinkommt, unangenehm werden. Und solange Sie ein Mobiltelefon bei sich haben, werden Sie alte Skripte verfolgen.
Wenn Sie der Meinung sind, dass dies tatsächlich gut klingt, finden Sie hier ein großartiges Puppet-Tutorial mit einer virtuellen Umgebung , um Ihnen den Einstieg zu erleichtern.
quelle
user{"root":}
, um das Passwort festzulegen . Verwenden Sie stattdessen eineexec{"chpasswd -e ..."}
, die viel sicherer ist.pip install ansible
Erstellen Sie einfach in einer GNU / Linux-Box eine Liste von Hosts undansible -m user -a "password=$crpyt"
. Keine Agenten benötigt. Verwaltet GNU / Linux, AIX und Solaris sofort.Ich habe das Perl-Modul Authen :: PAM unter Solaris mit großem Erfolg verwendet. Hier ist ein Beispielskript:
quelle
Wenn Sie Perl schreiben können, können Sie mit dem Modul Net :: OpenSSH :: Parallel ganz einfach Skripte schreiben, die auf entfernten Hosts über SSH parallele Aktionen ausführen.
Es enthält ein Beispielskript zum Ändern von Kennwörtern, das Sie als Basis verwenden können. Da es sich anscheinend um eine heterogene Umgebung handelt, möchten Sie die Hosts nach Typ gruppieren und für jeden einen anderen Sub für die Dialogbehandlung verwenden.
quelle
Ich weiß nicht, was "am besten" ist und ob es für alle Nicht-Linux * nix-Maschinen in Ihrem Mix möglich ist, aber haben Sie sich für diese Art von Aktivität Marionette oder Cfengine angesehen?
Es gibt auch kommerzielle (sehr teure) Tools für das Identitätsmanagement. Zwei, die ich in der Vergangenheit gesehen / verwendet habe, sind Oracle Identity Manager und das Novel-Äquivalent.
quelle
Nachdem ich weiter nachgeforscht habe, habe ich ein paar Dinge gelernt ...
In erster Linie ist dies eine wirklich lästige Aufgabe, die automatisiert werden muss, insbesondere in vielen verschiedenen Umgebungen. Die richtigste Antwort auf diese Frage lautet wahrscheinlich @ tomi's: use Puppet.
Irgendwann hoffe ich, Puppet zum Verwalten der Infrastruktur zu bewegen, aber die Bereitstellung auf den UNIX-Servern des gesamten Unternehmens für eine Änderung des Root-Kennworts ist derzeit noch nicht möglich.
Nachdem ich viele Hilfeseiten und viele Google-Fu-Seiten gelesen hatte, gelang es mir, ein Skript zu erstellen, das eine Liste von Zielservern durchläuft, eine SSH-Verbindung herstellt und eine der folgenden Aktionen ausführt:
Es geht um einiges mehr als nur um das Ausführen dieser Befehle, aber die oben genannten Befehle wirken wie die Magie.
Ich konnte keine einfache Möglichkeit finden, das Kennwort unter Solaris nicht iterativ zu ändern. Daher haben wir spontan Änderungen vorgenommen
/etc/shadow
.quelle
/dev/null
bevor Sie dies tun.Kürzlich habe ich dies mit Bash Script gemacht.
quelle
Dies ist meine bisherige Lösung. müssen noch sehen, ob es auf mehreren Systemen funktioniert
quelle
Sie können pdsh verwenden , um Ihren Befehl gleichzeitig auf mehreren Hosts auszuführen.
quelle
passwd
ist bei den verschiedenen genannten versionen unterschiedlich.pw
nicht immer verfügbar ....passwd
ist es immer benutzerinteraktiv.passwd
Auf RHEL Linux hat zumindest ein--stdin
ParameterNeben Puppet: SaltStack Ein weiterer Ansatz: Automatisieren Sie die Ausführung mithilfe von SSH-Bibliotheken entweder nacheinander oder parallel mithilfe von Fabric http://docs.fabfile.org/en/1.6/ , Capistrano oder ähnlichem, dessen Bereitstellung nicht viel Zeit und Mühe erfordert.
quelle
Zwei Optionen:
Puppe benutzen
Run Deck verwenden. Run Deck ist ein Server, mit dem Sie Befehle auf Hunderten von Computern gleichzeitig ausführen können. Sie können Maschinen in Gruppen gruppieren, um Befehle nur für eine Teilmenge von Maschinen auszuführen.
http://rundeck.org
quelle
Ich denke, das Format der
/etc/shadow
Datei ist ziemlich Standard in Linux-Distributionen. Können Sie einfach ein einfaches awk-Skript schreiben, um das Passwort zu aktualisieren?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
Ich würde es auf jeden Fall testen, damit du dich nicht selbst aussperrst;)
quelle