2012-06-19 20 views
5

Soy un novato en Unix. Estoy tratando de ejecutar un script de shell y comando como otro usuario.unix - ejecuta un comando como otro usuario

Por ejemplo: He iniciado sesión como usuario1 y quiero ejecutar una secuencia de comandos como usuario2. No quiero la solicitud de contraseña y quiero que se ingrese automáticamente. Soy consciente de la autenticación de clave pública, pero estoy tratando de encontrar si hay algo como:

sudo -u user2 script.sh 

Estoy tratando de cron esto, así que no quiero la solicitud de contraseña. Quiero que se maneje en el comando sudo.

favor ayuda

+0

Nunca entenderé este tema "fuera de tema" en Stack Overflow; a menudo me sorprende que lo usen personas que no conocen la tecnología en la pregunta o no entienden la pregunta en sí. – DaveRlz

Respuesta

4

Usted puede añadir la opción NOPASSWD a /etc/sudoers archivo. Pero puede ser que no es bueno para usted por razones de seguridad.

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

Otra opción que tiene: utiliza sudo, pero no ejecuta directamente desde una secuencia de comandos, pero utilizando pexpect o expect, que introduzca la contraseña para usted. Eso también puede no ser ideal desde el punto de vista de la seguridad, ya que debe guardar la contraseña en el script.

Con expect se puede hacer algo como:

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

No se olvide de establecer 500 permisos en ese archivo.

Con pexpect (que es un módulo de Python), este se verá como:

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

Si ejecuta el comando en cron y puede agregar el comando al crontab de usuario1, se puede hacer eso también. Esa puede ser la mejor solución.

user1$ crontab -e 
+0

Sí, tiene razón, no quiero deshabilitar la contraseña por completo, pero quería ingresar la contraseña durante el tiempo de ejecución de sudo. ¿Hay alguna manera? :( –

+0

@Kannan Lg: ¡Sí que podemos! –

0

agregue una opción NOPASSWD en /etc/sudoers como dice Igor, o simplemente programar el comando en usuario2 's crontab en el primer lugar.

Cuestiones relacionadas