es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo ejecutar comandos dentro de la sesión root en Python

Tengo que implementar un escenario en el que necesito iniciar sesión como root y luego realizar algunos comandos ssh y scp a través de Python para automatizar ciertos flujos de trabajo.

Ejemplo: Supongamos que MACHINE12 es mi host y el usuario actual es test, es decir, test@MACHINE12. Quiero que se escriba un código interactivo de tal manera que, si inserto los siguientes comandos, inicie sesión como usuario root y se mantenga la sesión para realizar otras operaciones en python.

{test@MACHINE12} su

password:

Una vez que se ingresa la contraseña, inició sesión como root.

{test@MACHINE12 test}

Realice otras operaciones aquí

{test@MACHINE12 test} ssh user1@abc

Intenté hacer esto mediante el comando “pexpect” en python, pero la sesión de root no se mantiene o permanece para realizar otras operaciones. Los comandos solo se pueden ejecutar si la sesión iniciada es root porque el host “abc” necesita permiso de root.

Aquí está mi código intentado:

def loginAsroot():
childTab = pexpect.spawn(“su”) // comando su para ingresar a root
childTab.expect(“:”)
childTab.sendline(“asdgfgh”) // ingresando contraseña
childTab.expect(“#”)

def runCommands():
command = “ssh user1@abc ‘cat /dfg/hello.txt’>> /doc/g/auth.txt”
process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
output, error = process.communicate(timeout=10000)
return output

// Llamada a la función
loginAsroot()
runCommands()

Estoy intentando ejecutar un comando de Linux y está dando un error de permiso denegado porque la sesión de root no se mantiene, se desconecta. ¿Cómo puedo lograr este tipo de ejecuciones?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para mantener la sesión de root y realizar otras operaciones, puede modificar su código de la siguiente manera:

    import pexpect
    
    def loginComoRoot():
        childTab = pexpect.spawn("su -")
        childTab.expect("Password:")
        childTab.sendline("contraseñaroot") # reemplace con la contraseña de root actual
        childTab.expect("#")
    
    def ejecutarComandos():
        comando = '''sshpass -p "contraseñaSSH" ssh usuario1@abc 'cat /dfg/hola.txt' >> /doc/g/auth.txt'''
        # reemplace "contraseñaSSH" con la contraseña real para el usuario1@abc
        proceso = subprocess.Popen(comando, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
        salida, error = proceso.communicate(timeout=10000)
        return salida
    
    # llamadas a funciones
    loginComoRoot()
    ejecutarComandos()
    

    Cambios realizados al código:

    • Se usó “su -” en lugar de “su” para iniciar sesión como root y obtener la sesión de root.
    • Se usó la contraseña real de root para el comando “sendline”.
    • Se cambió la función “runCommands” para usar “sshpass” en lugar de “ssh” para pasar la contraseña de usuario1@abc. Esto permitirá que el comando se ejecute como root.
    • Se usó la contraseña real para usuario1@abc en la variable “comando”.

    Con estos cambios, se debería mantener la sesión de root y los comandos deseados deberían ejecutarse correctamente.

Comments are closed.