Frage

In meinem Shell-Skript (bash) Ich möchte andere Shell-Skripten nennen.
Ich betreibe mein Skript als user_a. Eines dieser Skripte benötigt eine spezielle Behandlung:

  1. Es muss als verschiedene Benutzer ausgeführt werden (Benutzer_b). Kennwort benötigt hier.
  2. Es ist interaktiv, aber nicht nur fragt Fragen, sondern läuft ein anderes Skript in Namen eines anderen Benutzers (Benutzer_c) unter Verwendung von su. Ich muss ein Passwort eingeben hier als auch.

kann ich su dieses Skript aufrufen, aber seine Fragen irgendwie beantwortet werden. Ich kann nichts geben, weil es für jeden questons „stty:: Nicht eine Schreibmaschine“ druckt

Ich bin die spezielle Skript Aufruf diese Art und Weise

su user_B << ABC
...
special_script
...
ABC
War es hilfreich?

Lösung

#!/bin/bash

main_for_root(){
    :
}
# ------------------------------------------------------------------------------
abs_path="$(readlink -f `dirname $0`)/$(basename $0)"

# if [ `id -u` != 0 ] ; then
if [ `whoami` != 'root' ] ; then
    echo "[su -] run as root"
    su -c"/bin/bash $abs_path $@"
    exit 0
else
    main_for_root $@
fi

Es funktioniert für 1 Benutzer, so jetzt hinzufügen 'wenn ...' für die zweiten Benutzer

Andere Tipps

Eine weitere Option für Skripte als anderer Benutzer ist der ‚sudo‘ Befehl ausgeführt wird, betrachten Sie es als ‚Super-User tun:‘ aus Gründen der Lesbarkeit. Der Parameter -u gibt Benutzerinformationen. Also:

sudo -u user_B special_script

Wird das Passwort für Benutzer_b aufzufordern. Ich hatte noch nie ein Problem mit interaktiven Programmen läuft es zu benutzen. Sie können verwalten, wer mit wem über den visudo sudo können.

Sie können sudo verwenden und eine sudoers-Datei erstellen, die user_a das Skript als Benutzer_b ausgeführt werden kann.

eine Zeile wie:

user_A      ALL = (user_B) NOPASSWD: /usr/share/stuff/ABC

würde user_a erlauben so etwas wie

zu tun
sudo -u user_B /usr/share/stuff/ABC

ohne nach einem Passwort gefragt

su versucht, ein Passwort aus dem Terminal zu erhalten und braucht eine tty-Gerät, so dass es ioctl auszuschalten Taste Echo aufrufen können. Da die Standardeingabe von einem „hier Dokument“ (ABC) kommt, ein Versuch, die ioctl auf Dateideskriptor 0 yields „ein tty nicht“ zu nennen.

Wenn Sie ein hier dokumentieren anstelle eines bona fide Skript verwenden müssen, tun:

cat > /tmp/myscript.$$ <<ABC
#!/bin/sh
...
ABC
chmod +x /tmp/myscript.$$
sudo -u user_B /tmp/myscript.$$

Sie können wollen expect verwenden. Sein für eine Skript-Interaktion entwickelt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top