Réponses:
La solution la plus simple est de désactiver complètement la sécurité - changement true
de false
dans le /var/lib/jenkins/config.xml
fichier.
<useSecurity>true</useSecurity>
Ensuite, redémarrez Jenkins, en
sudo service jenkins restart
Ensuite, allez dans le panneau d'administration et définissez à nouveau tout.
Si vous exécutez votre Jenkins dans le pod k8s à partir d'un docker, ce qui est mon cas et ne pouvez pas exécuter la service
commande, vous pouvez simplement redémarrer Jenkins en supprimant le pod:
kubectl delete pod <jenkins-pod-name>
Une fois la commande émise, les k8 termineront l'ancien pod et en démarreront un nouveau.
sudo service jenkins restart
find / -name "config.xml"
dans votre terminal.
Une autre façon serait de modifier manuellement le fichier de configuration pour votre utilisateur (par exemple /var/lib/jenkins/users/username/config.xml) et de mettre à jour le contenu de passwordHash :
<passwordHash>#jbcrypt:$2a$10$razd3L1aXndFfBNHO95aj.IVrFydsxkcQCcLmujmFQzll3hcUrY7S</passwordHash>
Une fois que vous avez fait cela, redémarrez simplement Jenkins et connectez-vous en utilisant ce mot de passe:
test
<passwordHash>
balise xml est un enfant de <hudson.security.HudsonPrivateSecurityRealm_-Details>
. Regardez l'utilisateur admin par défaut pour avoir une idée de la structure XML totale.
J'ai trouvé le fichier en question situé dans / var / lib / jenkins appelé config.xml, modifiant ce qui a résolu le problème.
/Applications/jenkins-2.19.3-0/apps/jenkins/jenkins_home/users/admin/config.xml
L' <passwordHash>
élément en 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, foo
vous pouvez produire le SHA256 comme ceci:
echo -n 'foo{bar}' | sha256sum
Vous devriez obtenir 7f128793bc057556756f4195fb72cdc5bd8c5a74dee655a6bfb59b4a4c4f4349
le résultat. Prenez le haschich et mettez-le avec le sel dans <passwordHash>
:
<passwordHash>bar:7f128793bc057556756f4195fb72cdc5bd8c5a74dee655a6bfb59b4a4c4f4349</passwordHash>
Redémarrez Jenkins, puis essayez de vous connecter avec un mot de passe foo
. Réinitialisez ensuite votre mot de passe sur autre chose. (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 stocké lorsque vous réinitialisez votre mot de passe.)
Dans El-Capitan, config.xml est introuvable sur
/ var / lib / jenkins /
Son disponible en
~ / .jenkins
puis après cela, comme mentionné, ouvrez le fichier config.xml et apportez les modifications suivantes
Dans ce remplacer <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. Pourtant, je pense qu'il convient de mentionner que cela /var/lib/jenkins/config.xml
ressemble à ceci si vous avez activé la «Stratégie d'autorisation de matrice basée sur le projet». La suppression /var/lib/jenkins/config.xml
et le redémarrage de jenkins font également l'affaire. J'ai également supprimé les utilisateurs /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 matricielles (probablement facilement adaptables à d'autres méthodes de connexion):
config.xml
, défini disableSignup
surfalse
.config.xml
, dupliquez l'une des <permission>hudson.model.Hudson.Administer:username</permission>
lignes et remplacezusername
par le nouvel utilisateur.disableSignup
revenez à true
dansconfig.xml
.Nettoyage facultatif:
<permission>
ligne temporaire dans config.xml
.Aucun titre n'a été endommagé au cours de cette réponse.
Pour désactiver la sécurité Jenkins en quelques étapes simples sous Linux, exécutez ces commandes:
sudo ex +g/useSecurity/d +g/authorizationStrategy/d -scwq /var/lib/jenkins/config.xml
sudo /etc/init.d/jenkins restart
Il supprimera useSecurity
et les authorizationStrategy
lignes de votreconfig.xml
fichier de configuration racine et redémarrez 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 le domaine de contrôle d'accès / sécurité . Après cela, n'oubliez pas de créer l'utilisateur administrateur .
Sur la chance, vous vous verrouillez accidentellement hors de Jenkins en raison d'une erreur de permission, et vous n'avez pas accès côté serveur pour basculer vers l'utilisateur ou root jenkins ... Vous pouvez créer un travail dans Jenkins et l'ajouter au script shell:
sed -i 's/<useSecurity>true/<useSecurity>false/' ~/config.xml
Cliquez ensuite sur Build Now et redémarrez Jenkins (ou le serveur si vous en avez besoin!)
ProjectMatrixAuthorization
. Lorsque je fais le changement et redémarre Jenkins, je vois une exception Java dans Jenkins-UI. Pour résoudre ce problème, j'ai également supprimé la ligne avec authorizationStrategy
et c'était à nouveau correct. Jenkins l'a lu au prochain démarrage comme une balise vide.
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 un peu comme le fichier / etc / shadow pour les systèmes Linux ou UNIX ou le fichier SAM dans Windows, dans le sens où 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 modifier 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 affichera 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.
Afin de supprimer la sécurité par défaut de jenkins dans le système d'exploitation Windows,
Vous pouvez parcourir le fichier Config.xml créé dans /users/{UserName}/.jenkins.
Dans ce fichier, vous pouvez changer le code de
<useSecurity>true</useSecurity>
À,
<useSecurity>false</useSecurity>
1 Vérifiez d'abord l'emplacement si vous installez War ou Linux ou Windows en fonction de cela
par exemple en cas de guerre sous Linux et pour l'utilisateur administrateur
/home/"User_NAME"/.jenkins/users/admin/config.xml
accédez à 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 2 $ car celui-ci utilise jenkens
étape 1: allez dans le répertoire cd .jenkins / secrets puis vous obtiendrez un 'initialAdminPassword'.
étape 2: nano initialAdminPassword
vous obtiendrez un mot de passe
changer le <useSecurity>true</useSecurity>
pour <useSecurity>false</useSecurity>
ne sera pas suffisant, vous devez supprimer <authorizationStrategy>
et <securityRealm>
éléments aussi et redémarrez votre serveur jenkins en faisant sudo service jenkins restart
.
rappelez-vous ceci, réglé <usesecurity>
sur false
seulement peut vous causer un problème, car ces instructions sont mentionnées dans leur documentation officielle ici .
sudo su -
xclip -sel clip < /var/lib/jenkins/secrets/initialAdminPassword
ctrl + v
sur la zone de saisie du mot de passe.$ sudo apt-get install xclip
Jenkins sur KUBENETES et Docker
En cas de Jenkins sur un conteneur géré par un Kubernetes POD est un peu plus complexe , car: kubectl exec PODID --namespace=jenkins -it -- /bin/bash
vous permettra d'accéder directement au conteneur en cours d' exécution Jenkins, mais vous n'aurez pas accès root , sudo
, vi
et de nombreuses commandes ne sont pas disponibles et donc une solution de contournement est nécessaire.
Utilisez kubectl describe pod [...]
pour trouver le nœud exécutant votre pod et l'ID du conteneur(docker://...)
SSH
dans le nœuddocker exec -ti -u root -- /bin/bash
pour accéder au conteneur avec des 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 /var/jenkins_home
-à- dire que cet emplacement pourrait changer à l'avenir, vérifiez qu'il fonctionne df
.
Désactivez ensuite la sécurité - changez true en false dans le /var/jenkins_home/jenkins/config.xml
fichier.
<useSecurity>false</useSecurity>
Il suffit maintenant de redémarrer le Jenkins, action qui fera mourir le conteneur et le Pod, il sera recréé 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.
MISE À JOUR
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
[...]
Souvent, vous n'aurez pas l'autorisation de modifier le fichier config.xml.
La chose la plus simple serait de config.xml
supprimer et de supprimer à l'aide de la commande sudo.
Redémarrez les jenkins à l'aide de la commande sudo /etc/init.d/jenkins restart
Cela désactivera toute la sécurité dans Jenkins et l'option de connexion disparaîtrait
En utilisant bcrypt, vous pouvez résoudre ce problème. Étendre la réponse @Reem à quelqu'un qui essaie d'automatiser le processus en utilisant bash et 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é un mot de passe en dur ici, mais il peut s'agir d'une entrée utilisateur en fonction des besoins. Assurez-vous également d'ajouter que sleep
sinon toute autre commande tournant autour de Jenkins échouera.
Pour désactiver très simplement 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 telle 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 mentionné par d'autres, le Jenkins config.xml est dans /var/jenkins_home
l'image, mais l'utilisation sed
pour le modifier à partir du Dockerfile échoue, car (vraisemblablement) le config.xml n'existe pas jusqu'au démarrage du serveur.
J'ai eu un problème similaire, et suite à la réponse d'ArtB,
J'ai trouvé que mon utilisateur n'avait pas les configurations appropriées. donc ce que j'ai fait:
Remarque: la modification manuelle de ces 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. AFAIK Dans le pire des cas, j'aurais supprimé le fichier ~ / .jenkins / config.xml comme mentionné précédemment.
**> 1. ssh à la machine 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 xml authorizationStrategy, ajoutez la section ci-dessous (juste utilisé mon nom d'utilisateur au lieu de "mettre votre nom d'utilisateur")
- redémarrez jenkins. dans mon cas, en tant que service racine, arrêt tomcat7; ; service tomcat7 start
- Essayez de vous reconnecter. (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'ai eu l'intégration de github oauth, donc j'aurais pu essayer de remplacer l'autorisationStrategy par quelque chose comme ci-dessous:
Remarque: cela a fonctionné dans mon cas car j'avais un plugin github oauth spécifique qui était déjà configuré. C'est donc plus risqué que la solution précédente.
<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>
Modifiez le fichier $ JENKINS_HOME / config.xml et changez la configuration de sécurité avec ceci:
<authorizationStrategy class="hudson.security.AuthorizationStrategy$Unsecured"/>
Après cela, redémarrez Jenkins.
Pour celui qui utilise macOS, la nouvelle version peut simplement être installée par homebrew. donc pour se reposer, cette ligne de commande doit utiliser:
brew services restart jenkins-lts