Domanda

Nel mio script di shell (bash) Voglio chiamare altri script di shell.
eseguo il mio script come user_a. Uno di questi script richieda un trattamento speciale:

  1. Deve essere eseguito come utente diverso (User_b). Password necessaria qui.
  2. E 'interattivo, ma non chiede solo domande, ma viene eseguito in un altro script nome di un altro utente (user_c) utilizzando su. Devo inserire una password qui pure.

posso usare su chiamare questo script, ma le sue questioni devono essere risolte in qualche modo. Io non posso entrare nulla perché stampe per ogni questons "stty:: Non una macchina da scrivere"

sto chiamando lo script speciale in questo modo

su user_B << ABC
...
special_script
...
ABC
È stato utile?

Soluzione

#!/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

Si lavora per 1 utente, così ora aggiungere 'se ...' per il secondo utente

Altri suggerimenti

Un'altra opzione per l'esecuzione di script da altri utenti è il comando 'sudo', pensare ad esso come 'superuser fare:' per scopi di leggibilità. Il parametro -u fornisce informazioni nome utente. Quindi:

sudo -u user_B special_script

richiederà la password per user_b. Non ho mai avuto un problema con l'esecuzione di programmi interattivi che lo utilizzano. È possibile gestire chi può sudo per i quali tramite il comando visudo.

È possibile utilizzare sudo e creare un file sudoers che permette user_a per eseguire lo script come user_b.

una linea simile a:

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

permetterebbe user_a fare qualcosa di simile

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

senza richiedere una password

tentativi su di ottenere una password dal terminale e ha bisogno di un dispositivo tty in modo che possa chiamare ioctl per spegnere eco chiave. Dal momento che lo standard input proviene da un "here document" (ABC), un tentativo di chiamare l'ioctl sul descrittore di file 0 rendimenti "Non una tty".

Se è necessario utilizzare una qui documentare invece di un bona fide di script, fare:

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

Si consiglia di utilizzare expect. La sua progettata per l'interazione script.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top