Antworten:
Die einfachste Lösung ist , um vollständig zu deaktivieren Sicherheit - Änderung true
zu false
in - /var/lib/jenkins/config.xml
Datei.
<useSecurity>true</useSecurity>
Dann starten Sie Jenkins einfach neu
sudo service jenkins restart
Gehen Sie dann zum Admin-Bereich und stellen Sie alles erneut ein.
Wenn Sie Ihre Jenkins in einem k8s-Pod von einem Docker aus ausführen, was in meinem Fall der Fall ist und keinen service
Befehl ausführen kann, können Sie Jenkins einfach neu starten, indem Sie den Pod löschen:
kubectl delete pod <jenkins-pod-name>
Sobald der Befehl erteilt wurde, beenden die k8s den alten Pod und starten einen neuen.
sudo service jenkins restart
find / -name "config.xml"
in Ihrem Terminal.
Eine andere Möglichkeit besteht darin, die Konfigurationsdatei für Ihren Benutzer manuell zu bearbeiten (z. B. /var/lib/jenkins/users/username/config.xml) und den Inhalt von passwordHash zu aktualisieren :
<passwordHash>#jbcrypt:$2a$10$razd3L1aXndFfBNHO95aj.IVrFydsxkcQCcLmujmFQzll3hcUrY7S</passwordHash>
Sobald Sie dies getan haben, starten Sie Jenkins einfach neu und melden Sie sich mit diesem Passwort an:
test
<passwordHash>
XML-Tag ist ein untergeordnetes Element von <hudson.security.HudsonPrivateSecurityRealm_-Details>
. Sehen Sie sich den Standard-Administrator an, um eine Vorstellung von der gesamten XML-Struktur zu erhalten.
Ich fand die fragliche Datei in / var / lib / jenkins mit dem Namen config.xml und änderte sie, um das Problem zu beheben.
/Applications/jenkins-2.19.3-0/apps/jenkins/jenkins_home/users/admin/config.xml
Das <passwordHash>
Element in users/<username>/config.xml
akzeptiert Daten des Formats
salt:sha256("password{salt}")
Wenn also Ihr Salz bar
und Ihr Passwort ist foo
, können Sie den SHA256 wie folgt herstellen:
echo -n 'foo{bar}' | sha256sum
Sie sollten 7f128793bc057556756f4195fb72cdc5bd8c5a74dee655a6bfb59b4a4c4f4349
als Ergebnis erhalten. Nehmen Sie den Hasch und geben Sie ihn mit dem Salz in <passwordHash>
:
<passwordHash>bar:7f128793bc057556756f4195fb72cdc5bd8c5a74dee655a6bfb59b4a4c4f4349</passwordHash>
Starten Sie Jenkins neu und melden Sie sich mit dem Kennwort an foo
. Setzen Sie dann Ihr Passwort auf etwas anderes zurück. (Jenkins verwendet standardmäßig bcrypt, und eine Runde SHA256 ist keine sichere Methode zum Speichern von Kennwörtern. Beim Zurücksetzen Ihres Kennworts wird ein bcrypt-Hash gespeichert.)
In El-Capitan kann config.xml nicht unter gefunden werden
/ var / lib / jenkins /
Es ist verfügbar in
~ / .jenkins
Öffnen Sie danach, wie bereits erwähnt, die Datei config.xml und nehmen Sie die folgenden Änderungen vor
In diesem ersetzen <useSecurity>true</useSecurity>
durch<useSecurity>false</useSecurity>
Entfernen <authorizationStrategy>
und<securityRealm>
Speichern Sie es und starten Sie die Jenkins neu ( sudo service jenkins restart )
Die Antwort zum Ändern war richtig. Ich denke jedoch, es sollte erwähnt werden, dass dies /var/lib/jenkins/config.xml
ungefähr so aussieht, wenn Sie "Projektbasierte Matrix-Autorisierungsstrategie" aktiviert haben. Das Löschen /var/lib/jenkins/config.xml
und Neustarten von Jenkins reicht ebenfalls aus. Ich habe auch die Benutzer gelöscht /var/lib/jenkins/users
, um von vorne zu beginnen.
<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>
So setzen Sie es zurück, ohne die Sicherheit zu deaktivieren, wenn Sie Matrixberechtigungen verwenden (wahrscheinlich leicht an andere Anmeldemethoden anpassbar):
config.xml
setzen disableSignup
auf false
.config.xml
duplizieren eine der <permission>hudson.model.Hudson.Administer:username</permission>
Linien und ersetzt username
mit dem neuen Benutzer an .disableSignup
wieder auf true
in config.xml
.Optionale Bereinigung:
<permission>
Zeile in config.xml
.Bei dieser Antwort wurden keine Wertpapiere beschädigt.
Führen Sie die folgenden Befehle aus, um die Jenkins-Sicherheit in einfachen Schritten unter Linux zu deaktivieren:
sudo ex +g/useSecurity/d +g/authorizationStrategy/d -scwq /var/lib/jenkins/config.xml
sudo /etc/init.d/jenkins restart
Es entfernt useSecurity
und authorizationStrategy
Zeilen aus Ihrer config.xml
Root-Konfigurationsdatei und startet Ihre Jenkins neu.
Siehe auch: Deaktivieren Sie die Sicherheit auf der Jenkins-Website
Nachdem Sie den Zugriff auf Jenkins erhalten haben, können Sie die Sicherheit auf Ihrer Seite " Globale Sicherheit konfigurieren" wieder aktivieren, indem Sie " Zugriffskontrolle / Sicherheitsbereich" auswählen . Vergessen Sie danach nicht , den Administrator zu erstellen .
Möglicherweise sperren Sie sich aufgrund eines Berechtigungsfehlers versehentlich aus Jenkins aus und haben keinen serverseitigen Zugriff, um zum Jenkins-Benutzer oder Root zu wechseln. Sie können einen Job in Jenkins erstellen und diesen dem Shell-Skript hinzufügen:
sed -i 's/<useSecurity>true/<useSecurity>false/' ~/config.xml
Klicken Sie dann auf Jetzt erstellen und starten Sie Jenkins neu (oder den Server, falls erforderlich!).
ProjectMatrixAuthorization
. Wenn ich die Änderung vornehme und Jenkins neu starte, wird in der Jenkins-Benutzeroberfläche eine Java-Ausnahme angezeigt. Um dies zu beheben, entfernte ich auch die Zeile mit authorizationStrategy
und es war wieder in Ordnung. Jenkins las es beim nächsten Start als leeres Tag.
Wir können das Passwort zurücksetzen, während die Sicherheit aktiviert bleibt.
Die Datei config.xml in / var / lib / Jenkins / users / admin / verhält sich ähnlich wie die / etc / shadow-Datei Linux- oder UNIX-ähnliche Systeme oder die SAM-Datei in Windows, in dem Sinne, dass sie den Hash von speichert Passwort des Kontos.
Wenn Sie das Kennwort zurücksetzen müssen, ohne sich anzumelden, können Sie diese Datei bearbeiten und den alten Hash durch einen neuen ersetzen, der aus bcrypt generiert wurde:
$ pip install bcrypt
$ python
>>> import bcrypt
>>> bcrypt.hashpw("yourpassword", bcrypt.gensalt(rounds=10, prefix=b"2a"))
'YOUR_HASH'
Dadurch wird Ihr Hash mit dem Präfix 2a ausgegeben, dem richtigen Präfix für Jenkins-Hashes.
Bearbeiten Sie nun die Datei config.xml:
...
<passwordHash>#jbcrypt:REPLACE_THIS</passwordHash>
...
Sobald Sie den neuen Hash eingefügt haben, setzen Sie Jenkins zurück:
(wenn Sie sich auf einem System mit systemd befinden):
sudo systemctl restart Jenkins
Sie können sich jetzt anmelden und haben Ihr System keine Sekunde offen gelassen.
Um die standardmäßige Sicherheit für Jenkins unter Windows zu entfernen,
Sie können die in Config.xml erstellte Datei Config.xml durchlaufen, die in /users/{UserName}/.jenkins erstellt wurde.
In dieser Datei können Sie den Code von ändern
<useSecurity>true</useSecurity>
Zu,
<useSecurity>false</useSecurity>
1 Überprüfen Sie zuerst den Speicherort, wenn Sie War oder Linux oder Windows basierend darauf installieren
Zum Beispiel, wenn Krieg unter Linux und für Admin-Benutzer
/home/"User_NAME"/.jenkins/users/admin/config.xml
Gehe zu diesem Tag nach #jbcrypt:
<passwordHash>#jbcrypt:$2a$10$3DzCGLQr2oYXtcot4o0rB.wYi5kth6e45tcPpRFsuYqzLZfn1pcWK</passwordHash>
Ändern Sie dieses Passwort mithilfe einer beliebigen Website für den bcrypt-Hash-Generator
https://www.dailycred.com/article/bcrypt-calculator
Stellen Sie sicher, dass es mit $ 2a beginnt, da dieses von Jenkins verwendet wird
Schritt 1: Gehen Sie in das Verzeichnis cd .jenkins / secret, dann erhalten Sie ein 'initialAdminPassword'.
Schritt 2: nano initialAdminPassword
Sie erhalten ein Passwort
Das Ändern von <useSecurity>true</useSecurity>
auf <useSecurity>false</useSecurity>
wird nicht ausreichen. Sie sollten auch Elemente entfernen <authorizationStrategy>
und <securityRealm>
Ihren Jenkins-Server neu starten, indem Sie dies tun sudo service jenkins restart
.
Denken Sie daran, dass die Einstellung <usesecurity>
auf false
nur ein Problem für Sie verursachen kann, da diese Anweisungen in der offiziellen Dokumentation hier aufgeführt sind .
sudo su -
xclip -sel clip < /var/lib/jenkins/secrets/initialAdminPassword
ctrl + v
auf das Passwort-Eingabefeld.$ sudo apt-get install xclip
Jenkins über KUBENETES und Docker
Im Falle von Jenkins über einen Container von einem verwalteten Kubernetes POD ist ein wenig komplexer , da: kubectl exec PODID --namespace=jenkins -it -- /bin/bash
werden Sie den Zugriff ermöglichen , direkt auf den Behälter läuft Jenkins, aber Sie werden nicht Root - Zugriff haben , sudo
, vi
und viele Befehle sind nicht verfügbar und daher eine Abhilfe wird gebraucht.
Verwenden kubectl describe pod [...]
Sie diese Option, um den Knoten zu finden, auf dem Ihr Pod ausgeführt wird, sowie die Container-ID(docker://...)
SSH
in den Knotendocker exec -ti -u root -- /bin/bash
um auf den Container mit Root-Berechtigungen zuzugreifenapt-get update
sudo apt-get install vim
Der zweite Unterschied besteht darin, dass die Jenkins-Konfigurationsdatei in einem anderen Pfad abgelegt wird, der dem Einhängepunkt des persistenten Volumes entspricht. Das heißt /var/jenkins_home
, dieser Speicherort kann sich in Zukunft ändern. Überprüfen Sie, ob er ausgeführt wird df
.
Deaktivieren Sie dann die Sicherheit - ändern Sie in der /var/jenkins_home/jenkins/config.xml
Datei true in false .
<useSecurity>false</useSecurity>
Jetzt reicht es aus, die Jenkins neu zu starten. Diese Aktion führt dazu, dass der Container und der Pod sterben. Sie wird in einigen Sekunden erneut erstellt, wobei die Konfiguration aktualisiert wird (und alle Chancen wie vi, Update gelöscht werden), dank des anhaltenden Volumes.
Die gesamte Lösung wurde auf Google Kubernetes Engine getestet.
UPDATE
Beachten Sie, dass Sie ps -aux
das Kennwort auch im Klartext ausführen können , auch ohne Root-Zugriff.
jenkins@jenkins-87c47bbb8-g87nw:/$ps -aux
[...]
jenkins [..] -jar /usr/share/jenkins/jenkins.war --argumentsRealm.passwd.jenkins=password --argumentsRealm.roles.jenkins=admin
[...]
Oft haben Sie keine Berechtigung zum Bearbeiten der Datei config.xml.
Am einfachsten wäre es, config.xml
mit dem Befehl sudo ein Zurück zu nehmen und zu löschen.
Starten Sie die Jenkins mit dem Befehl neu sudo /etc/init.d/jenkins restart
Dadurch wird die gesamte Sicherheit in Jenkins deaktiviert und die Anmeldeoption wird ausgeblendet
Mit bcrypt können Sie dieses Problem lösen. Erweitern der @ Reem-Antwort für jemanden, der versucht, den Prozess mithilfe von Bash und Python zu automatisieren.
#!/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
Ich habe das Passwort hier fest codiert, aber es kann je nach Anforderung eine Benutzereingabe sein. Stellen Sie außerdem sicher, dass sleep
alle anderen Befehle, die sich um Jenkins drehen, fehlschlagen.
Verwenden Sie die JAVA-Eigenschaft, um sowohl die Sicherheit als auch den Startassistenten ganz einfach zu deaktivieren:
-Djenkins.install.runSetupWizard=false
Das Schöne daran ist, dass Sie es in einem Docker-Image verwenden können, sodass Ihr Container immer sofort ohne Anmeldebildschirm gestartet wird:
# Dockerfile
FROM jenkins/jenkins:lts
ENV JAVA_OPTS -Djenkins.install.runSetupWizard=false
Beachten Sie, dass sich die Jenkins-Datei config.xml, wie von anderen erwähnt, /var/jenkins_home
im Image befindet. Die Verwendung sed
zum Ändern aus der Docker-Datei schlägt jedoch fehl, da die Datei config.xml (vermutlich) erst nach dem Start des Servers vorhanden ist.
Ich hatte ein ähnliches Problem und nach der Antwort von ArtB
Ich stellte fest, dass mein Benutzer nicht die richtigen Konfigurationen hatte. Also, was ich getan habe:
Hinweis: Das manuelle Ändern solcher XML-Dateien ist riskant. Tun Sie dies auf eigenes Risiko. Da ich bereits ausgesperrt war, hatte ich nicht viel zu verlieren. AFAIK Im schlimmsten Fall hätte ich die Datei ~ / .jenkins / config.xml wie im vorherigen Beitrag erwähnt gelöscht.
**> 1. ssh zur jenkins maschine
- cd ~ / .jenkins (Ich denke, dass einige Installationen es unter /var/lib/jenkins/config.xml ablegen, aber in meinem Fall nicht)
- Fügen Sie in der Datei vi config.xml und unter dem Tag authorisationStrategy xml den folgenden Abschnitt hinzu (ich habe nur meinen Benutzernamen anstelle von "put-your-username" verwendet).
- Jenkins neu starten. in meinem Fall als Root-Dienst tomcat7 stop; ;; Service Tomcat7 starten
- Versuchen Sie erneut, sich anzumelden. (arbeitete für mich) **
unter
hinzufügen:
<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>
Jetzt können Sie in verschiedene Richtungen gehen. Zum Beispiel hatte ich github oauth Integration, also hätte ich versuchen können, die authorisationStrategy durch etwas wie das folgende zu ersetzen:
Hinweis: In meinem Fall hat es funktioniert, weil ich ein bestimmtes Github-Oauth-Plugin hatte, das bereits konfiguriert war. Es ist also riskanter als die vorherige Lösung.
<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>
Bearbeiten Sie die Datei $ JENKINS_HOME / config.xml und ändern Sie die Sicherheitskonfiguration folgendermaßen:
<authorizationStrategy class="hudson.security.AuthorizationStrategy$Unsecured"/>
Danach starten Sie Jenkins neu.
Für jemanden, der macOS verwendet, kann die neue Version nur von Homebrew installiert werden. Zum Ausruhen muss diese Befehlszeile Folgendes verwenden:
brew services restart jenkins-lts