2012-06-19 14 views
5

Ich bin ein Neuling für Unix. Ich versuche ein Shell-Skript und einen Befehl als einen anderen Benutzer auszuführen. Beispiel: Ich bin als Benutzer1 angemeldet und möchte ein Skript als Benutzer2 ausführen. Ich möchte die Passwortabfrage nicht und möchte, dass sie automatisch eingegeben wird. Ich bin mir bewusst, der Authentifizierung über öffentliche Schlüssel, aber ich versuche es zu finden, wenn so etwas wie:Unix - führe einen Befehl als ein anderer Benutzer

sudo -u user2 script.sh 

Ich versuche, dies zu cron, so dass ich nicht die Passwortabfrage wollen. Ich möchte, dass es im sudo-Befehl selbst behandelt wird.

bitte helfen

+0

Ich werde dieses Off-Thema-Thema auf Stack Overflow nie verstehen - es fällt mir oft auf, dass es von Leuten benutzt wird, die die Technologie in der Frage nicht kennen oder die Frage selbst nicht verstehen. – DaveRlz

Antwort

4

Sie NOPASSWD Option /etc/sudoers Datei hinzufügen können. Aber vielleicht ist es aus Sicherheitsgründen nicht gut für dich.

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

Eine weitere Option, die Sie: verwenden sudo, aber es ist nicht direkt von einem Skript ausführen, aber pexpect oder expect verwenden, die das Kennwort für Sie treten wird. Das ist möglicherweise auch aus Sicherheitsgründen nicht ideal, da Sie das Kennwort im Skript speichern müssen.

Mit expect Sie so etwas wie zu tun:

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

Vergessen Sie nicht, auf die Datei 500 Erlaubnis einzustellen.

Mit pexpect (das ist ein Python-Modul), wird dies wie folgt aussehen:

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

Wenn Sie den Befehl in cron ausführen und kann den Befehl an die crontab von user1 hinzufügen, können Sie das auch tun können. Das ist vielleicht die beste Lösung. in benutzer2 ‚s crontab in erster Linie

user1$ crontab -e 
+0

Ja, Sie haben recht, ich möchte das Passwort nicht komplett deaktivieren, sondern wollte das Passwort während der Sudo-Laufzeit eingeben. Gibt es einen Weg? :( –

+0

@ Kannan Lg: Ja können wir! –

0

Entweder eine NOPASSWD Option in /etc/sudoers hinzufügen, wie Igor sagt, oder einfach nur den Befehl planen.

Verwandte Themen