2010-09-07 10 views
5

Ich schreibe ein Bash-Skript, das viele andere Skripts aufruft.
Mehrere Skripte müssen als Benutzer_1, aber mehrere als Benutzer_2 ausgeführt werden.
Die Skripte sollten in strikter Reihenfolge aufgerufen werden. Ich beginne mein Skript als user_1 und benutze su viele Male, um user_2 zu werden. Diese Zeiten su erfordert ein Passwort, also muss ich es oft wiederholen. Ich möchte das vermeiden, aber su hat keinen Passwort-Parameter.
sudo und expect sind nicht installiert.Ausführen von Skripts mit mehr Benutzern

Antwort

0

Ich habe das Problem mit ssh gelöst. Ich habe den Authentifizierungsschlüssel für Benutzer_1 generiert und für Benutzer2 veröffentlicht. Passwort wird nicht mehr benötigt.

ssh -l user_1 hostname "command_1; command_2" 
1
  • Machen Sie eine Gabel für user_1 und für user_2 ('&' verwenden). Sie sollten (ähnlich wie Client-Server) mit 'Sperrdatei' (Semaphore) kommunizieren. Zum Beispiel user_1 etwas und user_2 Prüfung zu tun ist ‚Lock-Datei‘ existiert in während ... Schlaf Schleife

  • Vielleicht ist das dumm, aber Sie können ssh [email protected] Ende Tasten

+0

Das war auch meine erste Idee und es wäre sicherlich eine großartige Lösung. Ich fand es zu riskant. Es könnte in der Zukunft Probleme verursachen, wenn das Skript komplexer wird. –

1

Wenn Sie passieren zsh zu haben, ich glaube, Sie dies leicht tun können - so etwas wie:

#!/bin/zsh 
coproc user1_script 
su user2 
do_stuff 
echo "your_turn" >&p 
read MY_TURN 
do_more_stuff 
echo "your_turn" >&p 
read MY_TURN 
... 

user1_script:

#!/bin/zsh 
read MY_TURN 
do_stuff 
echo your_turn 
read MY_TURN 
do_more_stuff 
... 

Wenn Sie stecken bleiben und zsh haben, ist es trotzdem einen Versuch wert.

+1

Bash 4 und ksh haben auch Coprozesse. –

1

Sie könnten als root ausführen. Klingt riskant? Nicht, wenn Sie vorsichtig sind und jeden Befehl mit su vorangehen und den Benutzernamen hinzufügen, etwa so:

su -c 'script1' user_1 & & su -c 'script2' user_2

Dies wird (vorausgesetzt, Sie als root starten) Ändern Sie den Benutzer in user_1, bevor Sie script1 ausführen, und wechseln Sie dann zurück zu root. Wechseln Sie dann zu user_2, um script2 .. all zu starten, ohne nach mehreren Passwörtern zu fragen.

+0

Hört sich gut an, aber mein Skript muss auf einem Firmenserver laufen. Das Root-Passwort ist nur dem Systemadministrator bekannt. –

+0

Können Sie genauer erklären, warum Sie die beiden Benutzer benötigen? Sie haben die Passwörter für beide .. Könnten Sie vielleicht die Ergebnisdateien am Ende chown? – Spaceghost

+0

Dies wird ein Installationsskript sein. Wir verwenden 2 verschiedene Werkzeuge für unsere Anwendung. Beide Tools müssen als spezielle Benutzer installiert werden. Diese Regel wird vom Hersteller von Werkzeugen benötigt. Die Komponenten der Werkzeuge bauen aufeinander auf. Das bedeutet, dass ich das erste Tool installieren muss, anstatt einige Komponenten zu starten. Als nächstes muss ich das 2. Werkzeug installieren, andere Komponenten vom ersten Werkzeug starten, einige andere Operationen ausführen. Dies ist das grobe Szenario. –

Verwandte Themen