¿Cómo restablecer la configuración de seguridad de Jenkins desde la línea de comandos?


217

¿Hay alguna manera de restablecer todo (o simplemente deshabilitar la configuración de seguridad) desde la línea de comando sin un usuario / contraseña, ya que he logrado bloquearme por completo Jenkins?

Respuestas:


275

La solución más sencilla es desactivar por completo la seguridad - un cambio truea falsede /var/lib/jenkins/config.xmlarchivo.

<useSecurity>true</useSecurity>

Entonces solo reinicie Jenkins, por

sudo service jenkins restart

Y luego vaya al panel de administración y configure todo una vez más.

Si, en caso de que esté ejecutando su Jenkins dentro del pod k8s desde una ventana acoplable, que es mi caso y no puede ejecutar el servicecomando, puede reiniciar Jenkins eliminando el pod:

kubectl delete pod <jenkins-pod-name>

Una vez que se emitió el comando, los k8 terminarán el viejo pod e iniciarán uno nuevo.


3
Necesitaba reiniciar Jenkins para que se aplicara el cambio.
O Arbel

12
sudo service jenkins restart
MonoThreaded

10
Para aquellos que no pueden encontrar su uso config.xml find / -name "config.xml" en su terminal.
Laser Hawk

Después de cambiar la etiqueta de seguridad del usuario a falso para reiniciar jenking desde el símbolo del sistema --- stackoverflow.com/questions/14869311/…
Anurag_BEHS

1
También el archivo podría ubicarse en la carpeta ~ / .jenkins /
Andrii Abramov

181

Otra forma sería editar manualmente el archivo de configuración para su usuario (por ejemplo, /var/lib/jenkins/users/username/config.xml) y actualizar el contenido de passwordHash :

<passwordHash>#jbcrypt:$2a$10$razd3L1aXndFfBNHO95aj.IVrFydsxkcQCcLmujmFQzll3hcUrY7S</passwordHash>

Una vez que haya hecho esto, simplemente reinicie Jenkins e inicie sesión con esta contraseña:

test

1
¿Qué pasa si esta entrada no está allí? ¿Dónde ponerla realmente?
serup

2
la <passwordHash>etiqueta xml es hija de <hudson.security.HudsonPrivateSecurityRealm_-Details>. Mire al usuario administrador predeterminado para tener una idea de la estructura XML total.
ivandov

2
Esta es una buena solución que mantiene la instalación segura. Por curiosidad, ¿cómo se genera ese hash de contraseña?
kontextify

¡Gracias, esto es exactamente lo que necesitaba!
Matt Cavanagh

La modificación del contenido del archivo presente en C: \ Users \ <USER> \ .jenkins \ users \ admin ayudó a resolver el problema
Sakshi Singla

45

Encontré el archivo en cuestión ubicado en / var / lib / jenkins llamado config.xml, modificando que solucionó el problema.


1
Estoy usando El-Capitan y no se pudo encontrar config.xml en la ubicación
Durai Amuthan.H

@ DuraiAmuthan.H ¿Lo instaló con bitnami stack? El archivo de configuración estaría en/Applications/jenkins-2.19.3-0/apps/jenkins/jenkins_home/users/admin/config.xml
siegy22

@ryanzec, la respuesta de Nowakers usa el mismo archivo pero está mejor explicado, deberías considerar aceptarlo como la respuesta correcta.
Katu

donde encontraremos el archivo en hight sierra
prabakaran iOS

44

El <passwordHash>elemento en users/<username>/config.xmlaceptará datos del formato

salt:sha256("password{salt}")

Entonces, si su sal es bary su contraseña es, fooentonces puede producir el SHA256 de esta manera:

echo -n 'foo{bar}' | sha256sum

Deberías obtener 7f128793bc057556756f4195fb72cdc5bd8c5a74dee655a6bfb59b4a4c4f4349como resultado. Toma el hash y ponlo con la sal en <passwordHash>:

<passwordHash>bar:7f128793bc057556756f4195fb72cdc5bd8c5a74dee655a6bfb59b4a4c4f4349</passwordHash>

Reinicie Jenkins, luego intente iniciar sesión con contraseña foo. Luego restablezca su contraseña a otra cosa. (Jenkins usa bcrypt de forma predeterminada, y una ronda de SHA256 no es una forma segura de almacenar contraseñas. Obtendrá un hash de bcrypt almacenado cuando restablezca su contraseña).


1
Esto no parece funcionar. un ejemplo comienza con una sal de #jbscrypt y luego define los campos de cifrado $ 2a $ 10 $. ¿Qué significan estos?
jrwren

Mi respuesta funcionó para mí. Los campos adicionales que está viendo son para un formato hash diferente. La biblioteca que Jenkins usa para manejar contraseñas hash admite más de un formato. El formato jbcrypt al que te refieres es más seguro que sha256 con un salt, pero el formato sha256 + salt se puede producir fácilmente desde la línea de comando --- recuerda que el objetivo del ejercicio es volver a Jenkins, y luego cambie la contraseña desde la interfaz web de Jenkins.
uckelman

Esto tampoco funcionó para mí. Intentaré encontrar más información sobre bcrypt
Laurent Picquet

Funcionó para mí. Utilicé los siguientes comandos: `` `PASSWORD_DIGEST =" $ (echo -n "$ {ADMIN_PASSWORD} {$ {SALT}}" | sha256sum | awk '{print $ 1}') "echo" resumen de contraseña: $ PASSWORD_DIGEST "sed -i -e "s # <passwordHash>. * </passwordHash> # <passwordHash> $ {SALT}: $ {PASSWORD_DIGEST} </passwordHash> #" "/ usr / share / jenkins / ref / users / admin / config .xml "sed -i -e" s # <apiToken>. * </apiToken> # <apiToken> $ {API_TOKEN} </apiToken> # "" / usr / share / jenkins / ref / users / admin / config. xml "` ``
Laurent Picquet

Gracias mil. Usó exactamente los mismos valores y funcionó como un encanto. Volví a entrar y restablecí el pase.

26

En El-Capitan config.xml no se puede encontrar en

/ var / lib / jenkins /

Está disponible en

~ / .jenkins

luego, como se mencionó, abra el archivo config.xml y realice los siguientes cambios

  • En este reemplazar <useSecurity>true</useSecurity>con<useSecurity>false</useSecurity>

  • Eliminar <authorizationStrategy>y<securityRealm>

  • Guárdelo y reinicie jenkins ( sudo service jenkins restart )


No puedo editar el archivo config.xml en realidad. Cuando intento guardarlo usando vim, arroja que es un archivo de solo lectura y no se permite el acceso de escritura para hacerlo.
Emjey

19

La respuesta sobre la modificación fue correcta. Sin embargo, creo que debería mencionarse que se /var/lib/jenkins/config.xmlparece a esto si ha activado la "Estrategia de autorización de matriz basada en proyectos". Eliminar /var/lib/jenkins/config.xmly reiniciar jenkins también hace el truco. También eliminé a los usuarios /var/lib/jenkins/userspara comenzar desde cero.

<authorizationStrategy class="hudson.security.ProjectMatrixAuthorizationStrategy">
    <permission>hudson.model.Computer.Configure:jenkins-admin</permission>
    <permission>hudson.model.Computer.Connect:jenkins-admin</permission>
    <permission>hudson.model.Computer.Create:jenkins-admin</permission>
    <permission>hudson.model.Computer.Delete:jenkins-admin</permission>
    <permission>hudson.model.Computer.Disconnect:jenkins-admin</permission>
    <!-- if this is missing for your user and it is the only one, bad luck -->
    <permission>hudson.model.Hudson.Administer:jenkins-admin</permission>
    <permission>hudson.model.Hudson.Read:jenkins-admin</permission>
    <permission>hudson.model.Hudson.RunScripts:jenkins-admin</permission>
    <permission>hudson.model.Item.Build:jenkins-admin</permission>
    <permission>hudson.model.Item.Cancel:jenkins-admin</permission>
    <permission>hudson.model.Item.Configure:jenkins-admin</permission>
    <permission>hudson.model.Item.Create:jenkins-admin</permission>
    <permission>hudson.model.Item.Delete:jenkins-admin</permission>
    <permission>hudson.model.Item.Discover:jenkins-admin</permission>
    <permission>hudson.model.Item.Read:jenkins-admin</permission>
    <permission>hudson.model.Item.Workspace:jenkins-admin</permission>
    <permission>hudson.model.View.Configure:jenkins-admin</permission>
    <permission>hudson.model.View.Create:jenkins-admin</permission>
    <permission>hudson.model.View.Delete:jenkins-admin</permission>
    <permission>hudson.model.View.Read:jenkins-admin</permission>
  </authorizationStrategy>

14

Para restablecerlo sin desactivar la seguridad si está utilizando permisos de matriz (probablemente fácilmente adaptable a otros métodos de inicio de sesión):

  1. En config.xml, establecido disableSignupen false.
  2. Reinicia Jenkins.
  3. Vaya a la página web de Jenkins y regístrese con un nuevo usuario .
  4. En config.xml, duplicar una de las <permission>hudson.model.Hudson.Administer:username</permission>líneas y reemplazar usernamecon el nuevo usuario.
  5. Si es un servidor privado, disableSignupvuelva a configurarlo trueen config.xml.
  6. Reinicia Jenkins.
  7. Vaya a la página web de Jenkins e inicie sesión como el nuevo usuario .
  8. Restablecer la contraseña del usuario original.
  9. Inicie sesión como usuario original.

Limpieza opcional:

  1. Eliminar el nuevo usuario.
  2. Eliminar la <permission>línea temporal en config.xml.

No se perjudicaron valores durante esta respuesta.


Agregar al conjunto de limpieza deshabilitar Regístrese de nuevo a verdadero y reinicie jenkins
Marc

14

Para deshabilitar la seguridad de Jenkins en pasos simples en Linux, ejecute estos comandos:

sudo ex +g/useSecurity/d +g/authorizationStrategy/d -scwq /var/lib/jenkins/config.xml
sudo /etc/init.d/jenkins restart

Se eliminará useSecurityy authorizationStrategylíneas de su config.xmlarchivo de configuración raíz y reinicie su Jenkins.

Ver también: Deshabilitar la seguridad en el sitio web de Jenkins


Después de obtener el acceso a Jenkins, puede volver a habilitar la seguridad en su página Configurar seguridad global seleccionando el Reino de control de acceso / seguridad . Después de eso, no olvides crear el usuario administrador .


Funcionó para mí, sin embargo, se está saltando la autorización ahora.
hemanto

@hemanto Debe habilitar la seguridad para volver a habilitar la autorización. He actualizado la respuesta.
kenorb

12

En caso de que accidentalmente se bloquee accidentalmente de Jenkins debido a un error de permiso, y no tiene acceso del lado del servidor para cambiar al usuario o root de jenkins ... Puede hacer un trabajo en Jenkins y agregar esto al Shell Script:

sed -i 's/<useSecurity>true/<useSecurity>false/' ~/config.xml

Luego haga clic en Construir ahora y reinicie Jenkins (¡o el servidor si es necesario!)


1
¿Cómo se crea un trabajo en Jenkins en caso de que quede bloqueado?
GeroldBroser reintegra a Mónica

En este caso, tenía una ventana de Chrome normal iniciada y modifiqué la configuración de seguridad y probé en una ventana de incógnito antes de cerrar sesión en la ventana principal. La prueba no me permitió iniciar sesión, pero mis sesiones persistieron en la ventana principal para poder reparar el daño.
Nick

1
Creo que parte de la configuración de seguridad que había cambiado también significaba que mi sesión de autenticación ya no tenía permiso para alterar las configuraciones de seguridad de Jenkins.
Nick

Se encuentra con este problema después de la activación ProjectMatrixAuthorization. Cuando hago el cambio y reinicio Jenkins, veo una excepción de Java en la interfaz de usuario de Jenkins. Para solucionar esto, eliminé también la línea con authorizationStrategyy estaba bien nuevamente. Jenkins lo leyó en el siguiente inicio como una etiqueta vacía.
Peter Schneider

12

Podemos restablecer la contraseña dejando la seguridad activada.

El archivo config.xml en / var / lib / Jenkins / users / admin / actúa como el archivo / etc / shadow Linux o sistemas similares a UNIX o el archivo SAM en Windows, en el sentido de que almacena el hash del contraseña de la cuenta

Si necesita restablecer la contraseña sin iniciar sesión, puede editar este archivo y reemplazar el hash anterior por uno nuevo generado desde bcrypt:

$ pip install bcrypt
$ python
>>> import bcrypt
>>> bcrypt.hashpw("yourpassword", bcrypt.gensalt(rounds=10, prefix=b"2a"))
'YOUR_HASH'

Esto generará su hash, con el prefijo 2a, el prefijo correcto para los hashes de Jenkins.

Ahora, edite el archivo config.xml:

...
<passwordHash>#jbcrypt:REPLACE_THIS</passwordHash>
...

Una vez que inserte el nuevo hash, reinicie Jenkins:

(si está en un sistema con systemd):

sudo systemctl restart Jenkins

Ahora puede iniciar sesión y no dejó su sistema abierto por un segundo.


5
\.jenkins\secrets\initialAdminPassword

Copie la contraseña del archivo inicialAdminPassword y péguela en Jenkins.


4

Para eliminar la seguridad predeterminada de jenkins en el sistema operativo Windows,

Puede recorrer el archivo Config.xml creado dentro de /users/{UserName}/.jenkins.

Dentro de este archivo puede cambiar el código de

<useSecurity>true</useSecurity>

A,

<useSecurity>false</useSecurity>

4

1 primero verifique la ubicación si instala war o Linux o windows según eso

por ejemplo, si la guerra bajo Linux y para el usuario administrador

/home/"User_NAME"/.jenkins/users/admin/config.xml

vaya a esta etiqueta después de #jbcrypt:

<passwordHash>#jbcrypt:$2a$10$3DzCGLQr2oYXtcot4o0rB.wYi5kth6e45tcPpRFsuYqzLZfn1pcWK</passwordHash>

cambie esta contraseña utilizando cualquier sitio web para bcrypt hash generator

https://www.dailycred.com/article/bcrypt-calculator

asegúrese de que comience con $ 2a porque este usa jenkens


4

paso-1: ve al directorio cd .jenkins / secrets y obtendrás una 'contraseñaAdmin inicial'.

paso-2: nano initialAdminPassword

obtendrás una contraseña


2

el cambio de la <useSecurity>true</useSecurity>que <useSecurity>false</useSecurity>no será suficiente, debe quitar <authorizationStrategy>y <securityRealm>elementos también y reinicie el servidor de Jenkins haciendo sudo service jenkins restart.

recordar esto, ajuste <usesecurity>a falsesolamente puede causar un problema para usted, ya que se mencionan en estas instrucciones emabrgo documentación oficial aquí .


1

Una forma fácil de salir de esto es usar el administrador psw para iniciar sesión con su usuario administrador:

  • Cambiar a usuario root: sudo su -
  • Copia la contraseña: xclip -sel clip < /var/lib/jenkins/secrets/initialAdminPassword
  • Inicie sesión con el administrador y presione ctrl + ven el cuadro de entrada de contraseña.

Instala xclip si no lo tienes:

  • $ sudo apt-get install xclip

Usar la contraseña predeterminada funcionó para mí. Para simplificarlo, puede hacer 'cat secrets / initialAdminPassword' en lugar de instalar xclip por una sola vez.
Paul

Algunas veces esta contraseña no está presente. No estoy seguro de cómo puede omitir esta configuración, pero para mí, no está presente y tuve que editar config.xml
vinicius.hisao

1

Jenkins sobre KUBENETES y Docker

En caso de Jenkins sobre un recipiente gestionado por un Kubernetes POD es un poco más complejo, ya que: kubectl exec PODID --namespace=jenkins -it -- /bin/bashle permitirá acceder directamente al recipiente corriendo Jenkins, pero no tendrá acceso a la raíz , sudo,vi y muchos comandos no están disponibles y por lo tanto una solución es necesario

Use kubectl describe pod [...]para encontrar el nodo que ejecuta su Pod y la ID del contenedor(docker://...)

  • SSH en el nodo
  • ejecutar docker exec -ti -u root -- /bin/bashpara acceder al contenedor con privilegios de root
  • apt-get update
  • sudo apt-get install vim

La segunda diferencia es que el archivo de configuración de Jenkins se coloca en una ruta diferente que corresponde al punto de montaje del volumen persistente, es decir /var/jenkins_home, esta ubicación puede cambiar en el futuro, verifíquelo en ejecucióndf .

Luego deshabilite la seguridad: cambie de verdadero a falso en el /var/jenkins_home/jenkins/config.xmlarchivo.

<useSecurity>false</useSecurity>

Ahora es suficiente reiniciar Jenkins, acción que hará que el contenedor y el Pod mueran, se creará nuevamente en unos segundos con la configuración actualizada (y todas las posibilidades como vi, actualización borrada) gracias al volumen persistente.

Toda la solución ha sido probada en Google Kubernetes Engine. ACTUALIZACIÓN Tenga en cuenta que también puede ejecutar ps -auxla contraseña en texto sin formato, incluso sin acceso de root.

jenkins@jenkins-87c47bbb8-g87nw:/$ps -aux
[...]
jenkins [..] -jar /usr/share/jenkins/jenkins.war --argumentsRealm.passwd.jenkins=password --argumentsRealm.roles.jenkins=admin
[...]

1

Muchas veces no tendrá permisos para editar el archivo config.xml.

Lo más simple sería retroceder config.xml y eliminar usando el comando sudo.

Reinicia los jenkins con el comando sudo /etc/init.d/jenkins restart

Esto deshabilitará toda la seguridad en Jenkins y la opción de inicio de sesión desaparecerá


Si puede eliminar config.xml con sudo, también puede editarlo con sudo. por ejemplo, sudo vi ...
Lee Meador

1

Usando bcrypt puedes resolver este problema. Extender la respuesta @Reem para alguien que está tratando de automatizar el proceso usando bash y python.

#!/bin/bash

pip install bcrypt
yum install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum -y install xmlstarlet

cat > /tmp/jenkinsHash.py <<EOF
import bcrypt
import sys

if not sys.argv[1]:
  sys.exit(10)

plaintext_pwd=sys.argv[1]
encrypted_pwd=bcrypt.hashpw(sys.argv[1], bcrypt.gensalt(rounds=10, prefix=b"2a"))
isCorrect=bcrypt.checkpw(plaintext_pwd, encrypted_pwd)

if not isCorrect:
   sys.exit(20);

print "{}".format(encrypted_pwd)
EOF

chmod +x /tmp/jenkinsHash.py
cd /var/lib/jenkins/users/admin*
pwd
while (( 1 )); do
    echo "Waiting for Jenkins to generate admin user's config file ..."

    if [[ -f "./config.xml" ]]; then
        break
    fi

    sleep 10
done

echo "Admin config file created"

admin_password=$(python /tmp/jenkinsHash.py password 2>&1)

# Repalcing the new passowrd
xmlstarlet -q ed --inplace -u "/user/properties/hudson.security.HudsonPrivateSecurityRealm_-Details/passwordHash" -v '#jbcrypt:'"$admin_password" config.xml

# Restart
systemctl restart jenkins
sleep 10

He mantenido la contraseña codificada aquí, pero puede ser una entrada del usuario según el requisito. También asegúrese de agregar que, de lo sleepcontrario, cualquier otro comando que gire en torno a Jenkins fallará.


1

Para deshabilitar simplemente la seguridad y el asistente de inicio, use la propiedad JAVA:

-Djenkins.install.runSetupWizard=false

Lo bueno de esto es que puede usarlo en una imagen Docker de modo que su contenedor siempre se inicie inmediatamente sin pantalla de inicio de sesión:

# Dockerfile
FROM jenkins/jenkins:lts
ENV JAVA_OPTS -Djenkins.install.runSetupWizard=false

Tenga en cuenta que, como lo han mencionado otros, Jenkins config.xml está en /var/jenkins_homela imagen, pero el uso sedpara modificarlo desde el Dockerfile falla, porque (presumiblemente) config.xml no existe hasta que se inicia el servidor.


0

Tuve un problema similar, y después de la respuesta de ArtB,

Descubrí que mi usuario no tenía las configuraciones adecuadas. entonces lo que hice:

Nota: modificar manualmente dichos archivos XML es arriesgado. Hazlo bajo tu propio riesgo. Como ya estaba bloqueado, no tenía mucho que perder. AFAIK En el peor de los casos, habría eliminado el archivo ~ / .jenkins / config.xml como se mencionó en la publicación anterior.

**> 1. ssh a la máquina jenkins

  1. cd ~ / .jenkins (supongo que algunas instalaciones lo ubican en /var/lib/jenkins/config.xml, pero no en mi caso)
  2. vi config.xml, y bajo la etiqueta de autorización xStrategy xml, agregue la sección a continuación (solo usé mi nombre de usuario en lugar de "poner-su-nombre de usuario")
  3. reiniciar jenkins. en mi caso como servicio raíz tomcat7 stop; ; servicio tomcat7 start
  4. Intenta iniciar sesión de nuevo. (trabajó para mi)**

debajo

añadir:

<permission>hudson.model.Computer.Build:put-your-username</permission>
<permission>hudson.model.Computer.Configure:put-your-username</permission>
<permission>hudson.model.Computer.Connect:put-your-username</permission>
<permission>hudson.model.Computer.Create:put-your-username</permission>
<permission>hudson.model.Computer.Delete:put-your-username</permission>
<permission>hudson.model.Computer.Disconnect:put-your-username</permission>
<permission>hudson.model.Hudson.Administer:put-your-username</permission>
<permission>hudson.model.Hudson.ConfigureUpdateCenter:put-your-username</permission>
<permission>hudson.model.Hudson.Read:put-your-username</permission>
<permission>hudson.model.Hudson.RunScripts:put-your-username</permission>
<permission>hudson.model.Hudson.UploadPlugins:put-your-username</permission>
<permission>hudson.model.Item.Build:put-your-username</permission>
<permission>hudson.model.Item.Cancel:put-your-username</permission>
<permission>hudson.model.Item.Configure:put-your-username</permission>
<permission>hudson.model.Item.Create:put-your-username</permission>
<permission>hudson.model.Item.Delete:put-your-username</permission>
<permission>hudson.model.Item.Discover:put-your-username</permission>
<permission>hudson.model.Item.Read:put-your-username</permission>
<permission>hudson.model.Item.Workspace:put-your-username</permission>
<permission>hudson.model.Run.Delete:put-your-username</permission>
<permission>hudson.model.Run.Update:put-your-username</permission>
<permission>hudson.model.View.Configure:put-your-username</permission>
<permission>hudson.model.View.Create:put-your-username</permission>
<permission>hudson.model.View.Delete:put-your-username</permission>
<permission>hudson.model.View.Read:put-your-username</permission>
<permission>hudson.scm.SCM.Tag:put-your-username</permission>

Ahora, puedes ir a diferentes direcciones. Por ejemplo, tenía la integración de github oauth, por lo que podría haber intentado reemplazar la estrategia de autorización con algo como a continuación:

Nota :, funcionó en mi caso porque tenía un plugin github oauth específico que ya estaba configurado. Por lo tanto, es más arriesgado que la solución anterior.

  <authorizationStrategy class="org.jenkinsci.plugins.GithubAuthorizationStrategy" plugin="github-oauth@0.14">
    <rootACL>
      <organizationNameList class="linked-list">
        <string></string>
      </organizationNameList>
      <adminUserNameList class="linked-list">
        <string>put-your-username</string>
        <string>username2</string>
        <string>username3</string>
        <string>username_4_etc_put_username_that_will_become_administrator</string>
      </adminUserNameList>
      <authenticatedUserReadPermission>true</authenticatedUserReadPermission>
      <allowGithubWebHookPermission>false</allowGithubWebHookPermission>
      <allowCcTrayPermission>false</allowCcTrayPermission>
      <allowAnonymousReadPermission>false</allowAnonymousReadPermission>
    </rootACL>
  </authorizationStrategy>

0

Edite el archivo $ JENKINS_HOME / config.xml y cambie la configuración de seguridad con esto:

<authorizationStrategy class="hudson.security.AuthorizationStrategy$Unsecured"/>

Después de eso, reinicie Jenkins.


0

Para alguien que usa macOS, la nueva versión solo puede ser instalada por homebrew. así que para descansar, esta línea de comando debe usar:

brew services restart jenkins-lts
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.