Respuestas:
La solución más sencilla es desactivar por completo la seguridad - un cambio true
a false
de /var/lib/jenkins/config.xml
archivo.
<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 service
comando, 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.
sudo service jenkins restart
find / -name "config.xml"
en su terminal.
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
<passwordHash>
etiqueta xml es hija de <hudson.security.HudsonPrivateSecurityRealm_-Details>
. Mire al usuario administrador predeterminado para tener una idea de la estructura XML total.
Encontré el archivo en cuestión ubicado en / var / lib / jenkins llamado config.xml, modificando que solucionó el problema.
/Applications/jenkins-2.19.3-0/apps/jenkins/jenkins_home/users/admin/config.xml
El <passwordHash>
elemento en users/<username>/config.xml
aceptará datos del formato
salt:sha256("password{salt}")
Entonces, si su sal es bar
y su contraseña es, foo
entonces puede producir el SHA256 de esta manera:
echo -n 'foo{bar}' | sha256sum
Deberías obtener 7f128793bc057556756f4195fb72cdc5bd8c5a74dee655a6bfb59b4a4c4f4349
como 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).
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 )
La respuesta sobre la modificación fue correcta. Sin embargo, creo que debería mencionarse que se /var/lib/jenkins/config.xml
parece a esto si ha activado la "Estrategia de autorización de matriz basada en proyectos". Eliminar /var/lib/jenkins/config.xml
y reiniciar jenkins también hace el truco. También eliminé a los usuarios /var/lib/jenkins/users
para 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>
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):
config.xml
, establecido disableSignup
en false
.config.xml
, duplicar una de las <permission>hudson.model.Hudson.Administer:username</permission>
líneas y reemplazar username
con el nuevo usuario.disableSignup
vuelva a configurarlo true
en config.xml
.Limpieza opcional:
<permission>
línea temporal en config.xml
.No se perjudicaron valores durante esta respuesta.
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á useSecurity
y authorizationStrategy
líneas de su config.xml
archivo 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 .
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!)
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 authorizationStrategy
y estaba bien nuevamente. Jenkins lo leyó en el siguiente inicio como una etiqueta vacía.
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.
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>
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
paso-1: ve al directorio cd .jenkins / secrets y obtendrás una 'contraseñaAdmin inicial'.
paso-2: nano initialAdminPassword
obtendrás una contraseña
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 false
solamente puede causar un problema para usted, ya que se mencionan en estas instrucciones emabrgo documentación oficial aquí .
sudo su -
xclip -sel clip < /var/lib/jenkins/secrets/initialAdminPassword
ctrl + v
en el cuadro de entrada de contraseña.$ sudo apt-get install xclip
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/bash
le 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 nododocker exec -ti -u root -- /bin/bash
para acceder al contenedor con privilegios de rootapt-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.xml
archivo.
<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 -aux
la 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
[...]
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á
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 sleep
contrario, cualquier otro comando que gire en torno a Jenkins fallará.
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_home
la imagen, pero el uso sed
para modificarlo desde el Dockerfile falla, porque (presumiblemente) config.xml no existe hasta que se inicia el servidor.
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
- cd ~ / .jenkins (supongo que algunas instalaciones lo ubican en /var/lib/jenkins/config.xml, pero no en mi caso)
- 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")
- reiniciar jenkins. en mi caso como servicio raíz tomcat7 stop; ; servicio tomcat7 start
- 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>
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.
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