without script password avoid python scripting passwords root csh

password - Haga que python ingrese la contraseña cuando ejecuta un script csh



linux script sudo without password prompt (7)

Debería poder pasarlo como un parámetro. algo como:

commands.getoutput(''server stop -p password'')

Estoy escribiendo una secuencia de comandos python que ejecuta un script csh en Solaris 10. La secuencia de comandos csh solicita al usuario la contraseña de root (que sé) pero no estoy seguro de cómo hacer que la secuencia de comandos python responda la solicitud con la contraseña. es posible? Esto es lo que estoy usando para ejecutar el script csh:

import commands commands.getoutput(''server stop'')


Eche un vistazo al módulo pexpect . Está diseñado para tratar con programas interactivos, que parece ser su caso.

Ah, y recuerde que la contraseña de la raíz de codificación dura en un script de shell o python es potencialmente un agujero de seguridad: D


Esto parece funcionar mejor:

import popen2 (stdout, stdin) = popen2.popen2(''server stop'') stdin.write("password")

Pero aún no es el 100%. A pesar de que "password" es la contraseña correcta, sigo obteniendo su: lo siento de nuevo desde el script csh cuando está tratando de su para rootear.


Use subproceso . Llame a Popen () para crear su proceso y use communication () para enviarlo. Lo siento, olvidé incluir el PIPE ...

from subprocess import Popen, PIPE proc = Popen([''server'', ''stop''], stdin=PIPE) proc.communicate(''password'')

Haría mejor en evitar la contraseña y probar un esquema como sudo y sudoers. Pexpect, mencionado en otra parte, no es parte de la biblioteca estándar.


import pexpect child = pexpect.spawn(''server stop'') child.expect_exact(''Password:'') child.sendline(''password'') print "Stopping the servers..." index = child.expect_exact([''Server processes successfully stopped.'', ''Server is not running...''], 60) child.expect(pexpect.EOF)

¡Hizo el truco! ¡Pexpect gobierna!


Agrega input= en proc.communicate() ejecutar, para chicos a quienes les gusta usar lib estándar.

from subprocess import Popen, PIPE proc = Popen([''server'', ''stop''], stdin=PIPE) proc.communicate(input=''password'')


Para evitar tener que responder la pregunta de Contraseña en el script de python, solo voy a ejecutar el script como root. Esta pregunta aún no ha sido respondida, pero supongo que lo haré de esta manera por ahora.