Existe-t-il un moyen de tout réinitialiser (ou simplement de désactiver les paramètres de sécurité) à partir de la ligne de commande sans nom d'utilisateur/mot de passe, car j'ai réussi à me verrouiller complètement en dehors de Jenkins
?
La solution la plus simple consiste à désactiver complètement la sécurité - remplacez true
par false
dans le fichier /var/lib/jenkins/config.xml
.
<useSecurity>true</useSecurity>
Ensuite, il suffit de redémarrer Jenkins, par
Sudo service jenkins restart
Et puis allez dans le panneau d'administration et réglez tout une fois de plus.
Si vous exécutez votre Jenkins dans le pod k8 depuis un menu fixe, ce qui est mon cas et que vous ne pouvez pas exécuter la commande service
, vous pouvez simplement redémarrer Jenkins en supprimant le pod:
kubectl delete pod <jenkins-pod-name>
Une fois la commande émise, les k8 mettront fin à l’ancien pod et en démarreront un nouveau.
Une autre méthode consiste à modifier manuellement le fichier de configuration de votre utilisateur (par exemple, /var/lib/jenkins/users/username/config.xml) et à mettre à jour le contenu de passwordHash:
<passwordHash>#jbcrypt:$2a$10$razd3L1aXndFfBNHO95aj.IVrFydsxkcQCcLmujmFQzll3hcUrY7S</passwordHash>
Une fois cela fait, redémarrez Jenkins et connectez-vous avec ce mot de passe:
test
J'ai trouvé le fichier en question situé dans/var/lib/jenkins appelé config.xml, ce qui modifiait le problème.
L'élément <passwordHash>
dans users/<username>/config.xml
acceptera les données du format
salt:sha256("password{salt}")
Donc, si votre sel est bar
et votre mot de passe est foo
, alors vous pouvez produire le SHA256 comme ceci:
echo -n 'foo{bar}' | sha256sum
Vous devriez obtenir 7f128793bc057556756f4195fb72cdc5bd8c5a74dee655a6bfb59b4a4c4f4349
comme résultat. Prenez le hash et mettez-le avec le sel dans <passwordHash>
:
<passwordHash>bar:7f128793bc057556756f4195fb72cdc5bd8c5a74dee655a6bfb59b4a4c4f4349</passwordHash>
Redémarrez Jenkins, puis essayez de vous connecter avec le mot de passe foo
. Puis réinitialisez votre mot de passe pour quelque chose d'autre. (Jenkins utilise bcrypt par défaut et un tour de SHA256 n’est pas un moyen sûr de stocker les mots de passe. Vous obtiendrez un hachage bcrypt lorsque vous réinitialiserez votre mot de passe.)
Dans El-Capitan config.xml ne peut être trouvé à
/ var/lib/jenkins /
Son disponible dans
~/.jenkins
ensuite, comme les autres mentionnés, ouvrez le fichier config.xml et apportez les modifications suivantes
Dans ce cas, remplacez <useSecurity>true</useSecurity>
par <useSecurity>false</useSecurity>
Supprimer <authorizationStrategy>
et <securityRealm>
Enregistrez-le et redémarrez jenkins (Sudo service jenkins restart)
La réponse sur la modification était correcte. Cependant, je pense qu'il convient de mentionner que /var/lib/jenkins/config.xml
ressemble à ceci si vous avez activé la "Stratégie d'autorisation de matrice basée sur le projet". Supprimer /var/lib/jenkins/config.xml
et redémarrer Jenkins font également l'affaire. J'ai également supprimé les utilisateurs dans /var/lib/jenkins/users
pour recommencer à zéro.
<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>
Pour le réinitialiser sans désactiver la sécurité si vous utilisez des autorisations de matrice (probablement facilement adaptable à d'autres méthodes de connexion):
config.xml
, définissez disableSignup
sur false
.config.xml
, dupliquez l'une des lignes <permission>hudson.model.Hudson.Administer:username</permission>
et remplacez username
par le nouvel utilisateur.disableSignup
sur true
dans config.xml
.Nettoyage optionnel:
<permission>
dans config.xml
.Aucun titre n'a été blessé lors de cette réponse.
Pour désactiver la sécurité Jenkins en quelques étapes simples sous Linux, exécutez les commandes suivantes:
Sudo ex +g/useSecurity/d +g/authorizationStrategy/d -scwq /var/lib/jenkins/config.xml
Sudo /etc/init.d/jenkins restart
Il supprimera les lignes useSecurity
et authorizationStrategy
de votre fichier de configuration racine config.xml
et redémarrera votre Jenkins.
Voir aussi: Désactiver la sécurité sur le site Web de Jenkins
Après avoir obtenu l’accès à Jenkins, vous pouvez réactiver la sécurité dans votre page Configurer la sécurité globale en choisissant l’option Contrôle d’accès/Domaine de sécurité . Après cela, n'oubliez pas de créer l'utilisateur admin .
Par contre, vous vous verrouillez accidentellement hors de Jenkins à cause d'une erreur de permission et vous n'avez pas d'accès côté serveur pour passer à l'utilisateur ou à la racine de jenkins ... Vous pouvez créer un travail dans Jenkins et l'ajouter au script de shell:
sed -i 's/<useSecurity>true/<useSecurity>false/' ~/config.xml
Puis cliquez sur Build Now et redémarrez Jenkins (ou le serveur si vous en avez besoin!)
Nous pouvons réinitialiser le mot de passe tout en laissant la sécurité activée.
Le fichier config.xml dans/var/lib/Jenkins/users/admin/agit en quelque sorte comme le fichier/etc/shadow sous Linux ou les systèmes de type UNIX ou le fichier SAM dans Windows, en ce sens qu'il stocke le hachage du fichier. mot de passe du compte.
Si vous devez réinitialiser le mot de passe sans vous connecter, vous pouvez éditer ce fichier et remplacer l'ancien hachage par un nouveau généré à partir de bcrypt:
$ pip install bcrypt
$ python
>>> import bcrypt
>>> bcrypt.hashpw("yourpassword", bcrypt.gensalt(rounds=10, prefix=b"2a"))
'YOUR_HASH'
Cela produira votre hachage, avec le préfixe 2a, le préfixe correct pour les hachages Jenkins.
Maintenant, éditez le fichier config.xml:
...
<passwordHash>#jbcrypt:REPLACE_THIS</passwordHash>
...
Une fois que vous avez inséré le nouveau hachage, réinitialisez Jenkins:
(si vous êtes sur un système avec systemd):
Sudo systemctl restart Jenkins
Vous pouvez maintenant vous connecter et vous n'avez pas laissé votre système ouvert pendant une seconde.
\.jenkins\secrets\initialAdminPassword
Copiez le mot de passe à partir du fichier initialAdminPassword et collez-le dans Jenkins.
étape-1: allez dans le répertoire cd .jenkins/secrets, vous obtiendrez un 'initialAdminPassword'.
étape 2: nano initialAdminPassword
vous obtiendrez un mot de passe
Afin de supprimer la sécurité par défaut pour Jenkins dans Windows OS,
Vous pouvez parcourir le fichier Config.xml créé à l’aide du fichier /users/{UserNameName/.jenkins.
Dans ce fichier, vous pouvez changer le code de
<useSecurity>true</useSecurity>
À,
<useSecurity>false</useSecurity>
1 premier emplacement de contrôle si vous installez war ou Linux ou des fenêtres basées sur celui-ci
par exemple si la guerre est sous Linux et pour l'utilisateur admin
/home/"User_NAME"/.jenkins/users/admin/config.xml
aller à cette balise après #jbcrypt:
<passwordHash>#jbcrypt:$2a$10$3DzCGLQr2oYXtcot4o0rB.wYi5kth6e45tcPpRFsuYqzLZfn1pcWK</passwordHash>
changer ce mot de passe en utilisant n'importe quel site web pour le générateur de hachage bcrypt
https://www.dailycred.com/article/bcrypt-calculator
assurez-vous qu'il commence par $ 2a car celui-ci est utilisé par jenkens
changer le <useSecurity>true</useSecurity>
en <useSecurity>false</useSecurity>
ne suffira pas, vous devriez aussi supprimer les éléments <authorizationStrategy>
et <securityRealm>
et redémarrer votre serveur Jenkins en faisant Sudo service jenkins restart
.
rappelez-vous ceci, régler <usesecurity>
sur false
risque de vous poser problème, car ces instructions sont mentionnées dans leur documentation officielle ici .
Jenkins sur KUBENETES et Docker
Dans le cas où Jenkins, un conteneur géré par un Kubernetes POD est un peu plus complexe puisque: kubectl exec PODID --namespace=jenkins -it -- /bin/bash
autoriserez-vous à accéder directement au conteneur exécutant Jenkins, mais vous n’avez pas accès à la racine, Sudo
, vi
et de nombreuses commandes ne sont pas disponibles. Par conséquent, une solution de contournement est nécessaire.
Utilisez kubectl describe pod [...]
pour trouver le nœud exécutant votre pod et l'ID de conteneur (docker://...)
SSH
dans le noeuddocker exec -ti -u root -- /bin/bash
pour accéder au conteneur avec les privilèges Rootapt-get update
Sudo apt-get install vim
La deuxième différence est que le fichier de configuration Jenkins est placé dans un chemin différent qui correspond au point de montage du volume persistant, c'est-à-dire /var/jenkins_home
, cet emplacement peut changer à l'avenir, vérifiez-le en cours d'exécution df
.
Désactivez ensuite la sécurité - remplacez true par false dans le fichier /var/jenkins_home/jenkins/config.xml
.
<useSecurity>false</useSecurity>
Maintenant, il suffit de redémarrer Jenkins, action qui fera mourir le conteneur et le pod, il sera créé à nouveau en quelques secondes avec la configuration mise à jour (et toutes les chances comme vi, mise à jour effacée) grâce au volume persistant.
L'ensemble de la solution a été testé sur Google Kubernetes Engine. UPDATE Notez que vous pouvez également exécuter ps -aux
, le mot de passe en texte brut est affiché même sans accès root.
jenkins@jenkins-87c47bbb8-g87nw:/$ps -aux
[...]
jenkins [..] -jar /usr/share/jenkins/jenkins.war --argumentsRealm.passwd.jenkins=password --argumentsRealm.roles.jenkins=admin
[...]
En utilisant bcrypt, vous pouvez résoudre ce problème. Étendre la réponse @Reem à quelqu'un qui tente d'automatiser le processus à l'aide de bash et de 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
J'ai gardé le mot de passe en dur ici, mais il peut s'agir d'une entrée d'utilisateur en fonction des besoins. Assurez-vous également d’ajouter que sleep
sinon toute autre commande tournant autour de Jenkins échouera.
Sudo su -
xclip -sel clip < /var/lib/jenkins/secrets/initialAdminPassword
ctrl + v
dans le champ de saisie du mot de passe.$ Sudo apt-get install xclip
Souvent, vous ne disposerez pas des autorisations nécessaires pour modifier le fichier config.xml.
Le plus simple serait de reprendre config.xml
et de le supprimer en utilisant la commande Sudo.
Redémarrez les Jenkins en utilisant la commande Sudo /etc/init.d/jenkins restart
Cela désactivera toute la sécurité dans Jenkins et l'option de connexion disparaîtrait
Editez le fichier $ JENKINS_HOME/config.xml et changez la configuration de la sécurité avec ceci:
<authorizationStrategy class="hudson.security.AuthorizationStrategy$Unsecured"/>
Après cela, redémarrez Jenkins.
J'ai eu un problème similaire, et suite à la réponse d'ArtB,
J'ai constaté que mon utilisateur n'avait pas les configurations appropriées. alors ce que j'ai fait:
Note: la modification manuelle de tels fichiers XML est risquée. Faites-le à vos risques et périls. Comme j'étais déjà en lock-out, je n'avais pas grand chose à perdre. fichier config.xml en tant que poste précédent mentionné.
**> 1. ssh à la machine de jenkins
- cd ~/.jenkins (je suppose que certaines installations le placent sous /var/lib/jenkins/config.xml, mais pas dans mon cas)
- vi config.xml, et sous la balise x autorisationStrategy, ajoutez la section ci-dessous (je viens d'utiliser mon nom d'utilisateur au lieu de "put-votre-nom d'utilisateur")
- redémarrez Jenkins. dans mon cas, en tant que service racine Tomcat7, arrêtez-vous; ; service Tomcat7 start
- Essayez de vous connecter à nouveau. (a travaillé pour moi) **
sous
ajouter:
<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>
Maintenant, vous pouvez aller dans différentes directions. Par exemple, j'avais l'intégration github oauth, alors j'aurais pu essayer de remplacer l'autorisationStrategy par quelque chose de semblable ci-dessous:
Note: Cela a fonctionné dans mon cas car j'avais un plugin spécifique github oauth déjà configuré. C'est donc plus risqué que la solution précédente.
<authorizationStrategy class="org.jenkinsci.plugins.GithubAuthorizationStrategy" plugin="[email protected]">
<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>
Pour très simplement désactiver la sécurité et l’Assistant de démarrage, utilisez la propriété Java:
-Djenkins.install.runSetupWizard=false
La bonne chose à ce sujet est que vous pouvez l’utiliser dans une image Docker de sorte que votre conteneur démarre toujours immédiatement sans écran de connexion:
# Dockerfile
FROM jenkins/jenkins:lts
ENV Java_OPTS -Djenkins.install.runSetupWizard=false
Notez que, comme d'autres l'ont mentionné, le fichier config.xml de Jenkins se trouve dans /var/jenkins_home
dans l'image, mais l'utilisation de sed
pour le modifier à partir du fichier Docker échoue, car (vraisemblablement) le fichier config.xml ne fonctionne pas. existe jusqu'au démarrage du serveur.