2012-06-19 21 views
5

Jestem początkującym użytkownikiem Unix. Próbuję uruchomić skrypt powłoki i polecenia jako inny użytkownik.unix - uruchom polecenie jako inny użytkownik

Na przykład: Jestem zalogowany jako użytkownik1 i chcę wykonać skrypt jako użytkownik2. Nie chcę monitu o hasło i chcę, aby był automatycznie wprowadzany. Jestem świadomy uwierzytelniania klucza publicznego, ale staram się dowiedzieć, czy istnieje coś takiego jak:

sudo -u user2 script.sh 

Próbuję cron to, więc nie chcę się pytanie o hasło. Chcę, żeby to było obsługiwane w samym poleceniu sudo.

pomóż

+0

Nigdy nie zrozumiem tego "wyłączonego tematu" na Stack Overflow - często uderza mnie, że jest używany przez ludzi, którzy nie znają technologii w pytaniu lub nie rozumieją samego pytania. – DaveRlz

Odpowiedz

4

Możesz dodać opcję NOPASSWD do /etc/sudoers pliku. Ale może to nie jest dobre dla ciebie ze względów bezpieczeństwa.

user user2 = NOPASSWD: /usr/local/bin/script.sh 

Inna opcja, że ​​masz: użyj sudo, ale nie bezpośrednio uruchomić go z jakimś skryptem, ale przy użyciu pexpect lub expect, że będzie wprowadzić hasło dla Ciebie. To może również nie być idealne z punktu widzenia bezpieczeństwa, ponieważ musisz zapisać hasło w skrypcie.

Z expect można zrobić coś takiego:

#!/usr/bin/expect 
set password "megapassword" 
spawn /bin/sudo -u user1 /usr/local/bin/script.sh 
expect "password for user:" 
send "$password\r" 
expect eof 

Nie zapomnij ustawić 500 pozwolenie na tym pliku.

Z pexpect (który to moduł Pythona) to będzie wyglądać:

import pexpect 
password = "megapassword" 
p = pexpect.spawn("sudo -u user1 /usr/local/bin/script.sh") 
i = p.expect([".ssword:*", pexpect.EOF]) 
p.sendline(password) 

Po uruchomieniu polecenia w cron i można dodać polecenie do crontab z user1, można to zrobić również. To może być najlepsze rozwiązanie.

user1$ crontab -e 
+0

Tak, masz rację, nie chcę całkowicie wyłączyć hasła, ale chciałem wprowadzić hasło podczas uruchamiania sudo. Czy istnieje sposób? :( –

+0

@Kannan Lg: Tak, możemy! –

0

Albo dodać opcję NOPASSWD w /etc/sudoers jak mówi Igor, lub po prostu zaplanować polecenia w User2 „s crontab w pierwszej kolejności.

Powiązane problemy