13 votos

Cómo ejecutar comandos como root en git post-recibir gancho

Me acabo de configurar un repositorio git remoto en un servidor de una aplicación web que se ejecuta como un Advenedizo servicio. Me gustaría utilizar la post-recibir gancho para desencadenar acciones que son necesarias para actualizar el código de la aplicación y parada, a continuación, reinicie el arranque del servicio. Este es mi repo.git/hooks/post-recibir archivo:

#!/bin/bash
export GIT_WORK_TREE=/var/www/current/myapp/
echo "Checking out new files and restarting app"
echo $USER
git checkout -f
sudo /sbin/stop myapp-service
sudo /sbin/start myapp-service

Basado en la información que he leído aquí: askUbuntu.comy el camino para llegar al advenedizo comandos a ejecutar como root es para editar mi visudo archivo. Aquí es el fragmento de código:

%sudo   ALL=(ALL:ALL) ALL
admin   ALL=(ALL:ALL) NOPASSWD: /sbin/start myapp-service /sbin/stop myapp-service

Pero cuando me git push a la distancia, puedo obtener una salida como:

$ git commit -am "test" && git push prod master
[master 59ffccd] test
 1 file changed, 1 insertion(+), 1 deletion(-)
Counting objects: 11, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 544 bytes, done.
Total 6 (delta 4), reused 0 (delta 0)
remote: Checking out new files on production and restarting app
remote: admin
remote: 
remote: sudo: no tty present and no askpass program specified
remote: Sorry, try again.

He comprobado que el usuario correcto es la ejecución de la post-recibir script (admin, como se hizo eco de arriba).

Alguien me puede ayudar detener y, a continuación, iniciar el Arranque del trabajo en un git post-recibir script gancho? Python, PHP, o node.js scripts de javascript también sería aceptable si sería capaz de ejecutar el advenedizo comando más fácilmente que bash (soy un bash novato)

Miré en mi auth registro y esto es lo que tengo:

Apr 24 19:35:21 myhost01 sudo: pam_unix(sudo:auth): auth could not identify password for [admin]
Apr 24 19:35:21 myhost01 sudo: pam_unix(sudo:auth): conversation failed
Apr 24 19:35:21 myhost01 sudo: pam_unix(sudo:auth): auth could not identify password for [admin]
Apr 24 19:35:21 myhost01 sudo: pam_unix(sudo:auth): conversation failed
Apr 24 19:35:21 myhost01 sudo: pam_unix(sudo:auth): auth could not identify password for [admin]
Apr 24 19:35:21 myhost01 sudo:    admin : 3 incorrect password attempts ; TTY=unknown ; PWD=/home/admin/myapp.git ; USER=root ; COMMAND=/s$
Apr 24 19:35:21 myhost01 sudo: unable to execute /usr/sbin/sendmail: No such file or directory
Apr 24 19:35:21  myhost01 sudo: pam_unix(sudo:auth): conversation failed

7voto

user2313067 Puntos 1332

Usted necesidad de separar los comandos en el archivo sudoers el uso de comas. Ahora, usted está autorizando a un único comando: /sbin/start myapp-service /sbin/stop myapp-service.

Usted necesita para escribir admin ALL=(ALL:ALL) NOPASSWD: /sbin/start myapp-service, /sbin/stop myapp-service.

6voto

djheru Puntos 183

Ok,me lo imaginé. Tuve que crear una secuencia de comandos independiente que contiene sólo los comandos que yo quería para que se ejecute como root.

#!/bin/bash
sudo /sbin/stop myapp-service
sudo /sbin/start myapp-service

Entonces, en mi post-recibir secuencia de comandos de hacer:

#!/bin/bash
export GIT_WORK_TREE=/var/www/current/myapp/
set -x
echo "Checking out new files on production and restarting app"
echo $USER
git checkout -f
sudo /home/admin/restart-myapp

Y finalmente, en mi visudo:

%sudo   ALL=(ALL:ALL) ALL
admin   ALL=(ALL) NOPASSWD: /home/admin/restart-myapp

Espero que esto ayude a alguien

1voto

jbo5112 Puntos 131

Tengo un archivo en /etc/sudoers.d/root_group que tiene la línea %root ALL=(ALL) NOPASSWD: ALL, y puedo agregar cuentas a la root del grupo para permitirles el uso de sudo sin una contraseña.

Estoy seguro de que hay implicaciones de seguridad para los permisos de archivo que no tuvo en cuenta las cuentas de usuario está en el grupo "root", pero si te preocupa, un grupo diferente puede ser utilizado. Acabo de cambiar la línea a %my_new_group ALL=(ALL) NOPASSWD: ALL y agregar las cuentas pertinentes a my_new_group.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: