2010-09-07 9 views
5

Sto scrivendo uno script di bash che chiama molti altri script.
Diversi script devono essere eseguiti come utente_1 ma diversi come utente_2.
Gli script devono essere chiamati in sequenza stretta. Comincio il mio script come utente_1 e uso su molte volte per diventare utente_2. Questi tempi su richiede una password, quindi devo ridigitarla molte volte. Vorrei evitarlo, ma su non ha parametri di password.
sudo e expect non sono installati.Esecuzione di script utilizzando più utenti

risposta

0

Ho risolto il problema usando ssh. Ho generato la chiave di autenticazione per utente_1 e pubblicata per utente2. La password non è più necessaria.

ssh -l user_1 hostname "command_1; command_2" 
1
  • Fai un fork (usando '&') per utente_1 e per utente_2. Dovrebbero comunicare (simile a client-serwer) usando 'lock file' (semaforo). Per esempio user_1 fare qualcosa e il controllo utente_2 è 'file di blocco' esistere in mentre ... sonno ciclo

  • Forse è stupido, ma è possibile utilizzare i tasti ssh [email protected] finali

+0

Questa è stata anche la mia prima idea e sarebbe sicuramente stata una grande soluzione. L'ho trovato troppo rischioso. Potrebbe causare problemi in futuro quando lo script diventerà più comico. –

1

Se vi capita avere zsh, penso che si può fare facilmente - qualcosa come:

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

Se sei bloccato e hai zsh, vale comunque la pena provare.

+1

Anche Bash 4 e ksh hanno coprocesses. –

1

È possibile eseguire come utente root. Sembra rischioso? No, se si è attenti e precedere ogni comando con su e aggiungere il nome utente in questo modo:

su -c user_1 'script1' & & su -c utente_2 'SCRIPT2'

Questo vi (supponendo che si avvia come root) cambia utente a utente_1 prima di eseguire script1, quindi torna a root, quindi cambia in user_2 per eseguire script2 .. il tutto senza richiedere password multiple.

+0

Sembra buono, ma il mio script deve essere eseguito su un server aziendale. La password di root è nota solo per l'amministratore di sistema. –

+0

Puoi fornire ulteriori dettagli sul motivo per cui hai bisogno dei due utenti? Hai le password per entrambi .. Potresti forse chownare i file dei risultati alla fine? – Spaceghost

+0

Questo sarà uno script di installazione. Stiamo utilizzando 2 diversi strumenti per la nostra appliacazione. Entrambi gli strumenti devono essere installati come utente speciale. Questa regola è richiesta dal produttore di strumenti. I componenti degli strumenti sono costruiti l'uno sull'altro. Ciò significa che devo installare il primo strumento piuttosto che avviare alcuni componenti. Successivamente devo installare lo strumento 2., avviare altri componenti dal primo strumento, fare altre operazioni. Questo è lo scenario approssimativo. –