2016-06-06 8 views
0

Wir haben einen Befehl, um den Beitritt unserer RHEL7 Server zu Privilege Manager für Sudo zu übernehmen, der nicht funktioniert, wenn er vom rc.local Skript ausgeführt wurde. Der Befehl ist unten mit generischen Namen anstelle unserer spezifischen Assets.Ersetzendes Passwort zum Befehl mit rc.local

echo "passwort" |/opt/quest/sbin/pmjoin_plugin -b -a -v -q -d masterport = 12345 -d FailOverTimeOut = 10 -d selecthostrandom = JA somehostname.com someotherhostname.com >> /var/log/Build.log

Der Befehl, wenn er manuell oder von anderen Bash-Skripten ausgeführt wird, funktioniert perfekt, aber wenn er innerhalb von rc.local ausgeführt wird, ist es so, als würde das Passwort nicht in den Befehl eingegeben, wenn er nach einem Passwort gefragt wird.

Ich habe einige Vorschläge wie "plymouth quit" gelesen, was nicht geholfen hat.

Jeder da draußen hat Erfahrung damit, ein Passwort auf diese Weise innerhalb des rc.local-Skripts zu "wiederholen", so dass Sie ein interaktives Skript durchlaufen können, das nach einem Passwort fragt?

Letztendlich ist dies nur etwas, was wir beim ersten Start einer Instanz ausführen möchten. Wenn es also eine andere Möglichkeit gibt, ein Shell-Skript einmal beim Booten auszuführen und sich dann selbst ohne rc.local zu löschen, dann könnten wir auch diese Route erkunden (crontab, etc?).

+0

Wollen Sie sagen, dass der Befehl mit "echo" Passwort "' und keine manuelle Passworteingabe manuell und von Skripten funktioniert? –

+0

@thatotherguy das ist richtig. Etwas an rc.local scheint das Verhalten zu ändern oder es funktioniert anders. Wenn ich den Befehl, den ich in der rc.local dafür habe und von der Befehlszeile ausführen, alles gut geht. Gleiches, wenn ich es zu einem .sh-Skript hinzufüge und dieses Skript anrufe. Wenn der Befehl von rc.local ausgeführt wird oder wenn rc.local versucht, den Befehl in einem SH-Skript aufzurufen, funktioniert es nicht. Das Protokoll, das ich an >> /var/log/Build.log ausspreche, verhält sich so, als hätte es ein schlechtes Passwort, was mich glauben lässt, dass es nicht das gleiche Passwort (oder überhaupt) in rc.local gibt. – Sadadar

+0

Was passiert, wenn Sie 'echo" testtest "| cat> /var/log/testtest.log'in dein rc.local, taucht testtest.log auf? –

Antwort

0

Ich endete mit der Implementierung einer Lösung, die für meine Situation funktionierte. Während es nicht so sauber ist, als nur Dinge in rc.local laufen zu lassen, wird es die Arbeit erledigen.

Ich nahm den Befehl aus unserem Skript rc.local und legte es in ein eigenes Skript .sh. Unser AMI-Build-Prozess speichert es unter /tmp/nameofscript.sh und ich habe auch eine Systemd-Service-Datei erstellt, die der AMI-Prozess in /etc/systemd/system/nameofservicefile.service speichert. Diese Servicedatei wird mit einem ExecStart =/tmp/nameofscript.sh ausgeführt, damit sie beim Neustart ausgeführt wird. Unser rc.local läuft in einer phase1 und phase2 Art und Weise, mit phase1 Neustart am Ende, also habe ich eine Zeile zum phase1 Teil hinzugefügt, um den Dienst mit "systemctl enable nameofservicefile.service" kurz vor dem Neustart zu aktivieren, der als letzter Schritt von phase1.

Bei dieser Route wurde der Befehl PM Sudo join während unserer "Phase2" Schritte ausgeführt, da der Neustart am Ende von "phase1" das Skript vom Systemd Service ausgelöst hat.

Um sicherzustellen, dass es nicht bei jedem Neustart ausgeführt wird, hat mein Skript /tmp/nameofscript.sh Schritte zu rm -f /etc/systemd/system/nameofservicefile.server und sich selbst mit rm - "$ 0" zu löschen .

Wahrscheinlich ein chaotischer Weg, dies zu tun, aber die Arbeit erledigt.

Verwandte Themen