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.

Ejecutando “sudo su” dentro de un pipeline de gitlab.

He instalado algunos software en un servidor al que mi gitlab runner realiza SSH, y uno de los comandos debe ejecutarse después de hacer sudo su. Si lo ejecuto como usuario regular, pero con sudo delante, no funciona. Primero debo cambiar completamente al usuario sudo.

Esto funciona bien cuando hago SSH en el servidor y ejecuto los comandos manualmente. Pero cuando intento hacerlo desde el pipeline (código aproximado abajo):

my_script:
  stage: stage
  script:
    - ssh -o -i id_rsa -tt user@1.1.1.1 << EOF
    - sudo su
    - run_special_command <blah blah>
    - exit
    # arriba se sale del SSH. abajo debería detener el pipeline
    - exit 0
    - EOF

Obtengo una salida muy extraña como la siguiente:

$ sudo su
[user@1.1.1.1 user]$ sudo su
echo $'\x1b[32;1m$ run_special_command <blah blah>\x1b[0;m'
run_special_command <blah blah>
echo $'\x1b[32;1m$ exit\x1b[0;m'
exit
echo $'\x1b[32;1m$ exit 0\x1b[0;m'
exit 0
echo $'\x1b[32;1m$ EOF\x1b[0;m'

Y lo que estoy viendo es que ni siquiera ejecuta el comando en absoluto, y no puedo entender por qué.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El problema es causado por la forma en que se está utilizando la sintaxis Heredoc en el pipeline. El Heredoc en realidad no ejecuta los comandos tal como están escritos. En su lugar, envía el bloque de texto a la entrada del comando ssh.

    Para solucionar esto, puedes probar cualquiera de las siguientes opciones:

    • Utilizar el comando ssh para ejecutar los comandos directamente, en lugar de depender de la sintaxis Heredoc. Por ejemplo:
    ssh -o -i id_rsa usuario@1.1.1.1 'sudo su -c "run_special_command <blah blah="">"'
    

    Observa el uso de la bandera -c con el comando sudo su. Esto nos permite ejecutar directamente el run_special_command desde el shell sudo.

    • Utilizar la sintaxis Heredoc con el comando echo para escribir los comandos en un archivo de script en el servidor. Luego, utiliza ssh para ejecutar el archivo de script. Por ejemplo:
    echo 'sudo su -c "run_special_command <blah blah="">"' > my_script.sh
    ssh -o -i id_rsa usuario@1.1.1.1 'bash -s' < my_script.sh
    

    Esto creará un archivo de script llamado my_script.sh en el servidor, que contiene el comando a ejecutar. Luego, utiliza ssh para ejecutar el comando bash en el servidor, pasando el archivo de script como entrada.

    Cualquiera de estos métodos debería funcionar, siempre y cuando el servidor tenga los permisos necesarios para ejecutar los comandos.

Comments are closed.