Risposte:
La soluzione più semplice è disabilitare completamente la sicurezza - passare true
a false
in /var/lib/jenkins/config.xml
file.
<useSecurity>true</useSecurity>
Quindi riavvia Jenkins, per
sudo service jenkins restart
Quindi vai al pannello di amministrazione e imposta nuovamente tutto.
Se stai eseguendo il tuo Jenkins all'interno del pod k8s da una finestra mobile, che è il mio caso e non puoi eseguire il service
comando, puoi semplicemente riavviare Jenkins eliminando il pod:
kubectl delete pod <jenkins-pod-name>
Una volta emesso il comando, i k8 termineranno il vecchio pod e ne avvieranno uno nuovo.
sudo service jenkins restart
find / -name "config.xml"
nel tuo terminale.
Un altro modo sarebbe quello di modificare manualmente il file di configurazione per l'utente (ad es. /Var/lib/jenkins/users/username/config.xml) e aggiornare il contenuto di passwordHash :
<passwordHash>#jbcrypt:$2a$10$razd3L1aXndFfBNHO95aj.IVrFydsxkcQCcLmujmFQzll3hcUrY7S</passwordHash>
Una volta fatto questo, riavvia Jenkins e accedi usando questa password:
test
<passwordHash>
tag xml è figlio di <hudson.security.HudsonPrivateSecurityRealm_-Details>
. Guarda l'utente amministratore predefinito per avere un'idea della struttura XML totale.
Ho trovato il file in questione che si trova in / var / lib / jenkins chiamato config.xml, modificando il problema risolto.
/Applications/jenkins-2.19.3-0/apps/jenkins/jenkins_home/users/admin/config.xml
L' <passwordHash>
elemento in users/<username>/config.xml
accetterà i dati del formato
salt:sha256("password{salt}")
Quindi, se il tuo sale è bar
e la tua password è foo
, puoi produrre SHA256 in questo modo:
echo -n 'foo{bar}' | sha256sum
Dovresti ottenere 7f128793bc057556756f4195fb72cdc5bd8c5a74dee655a6bfb59b4a4c4f4349
come risultato. Prendi l'hash e mettilo con il sale in <passwordHash>
:
<passwordHash>bar:7f128793bc057556756f4195fb72cdc5bd8c5a74dee655a6bfb59b4a4c4f4349</passwordHash>
Riavvia Jenkins, quindi prova ad accedere con la password foo
. Quindi reimpostare la password su qualcos'altro. (Jenkins utilizza bcrypt per impostazione predefinita e un round di SHA256 non è un modo sicuro per archiviare le password. Otterrai un hash bcrypt memorizzato quando ripristini la password.)
In El-Capitan non è possibile trovare config.xml su
/ Var / lib / Jenkins /
È disponibile in
~ / .Jenkins
quindi, come indicato in precedenza, aprire il file config.xml e apportare le seguenti modifiche
In questo sostituire <useSecurity>true</useSecurity>
con<useSecurity>false</useSecurity>
Rimuovi <authorizationStrategy>
e<securityRealm>
Salvalo e riavvia i jenkins ( sudo service jenkins restart )
La risposta alla modifica era corretta. Tuttavia, penso che dovrebbe essere menzionato che /var/lib/jenkins/config.xml
assomiglia a qualcosa del genere se hai attivato la "Strategia di autorizzazione a matrice basata su progetto". Anche l'eliminazione /var/lib/jenkins/config.xml
e il riavvio di jenkins sono utili. Ho anche cancellato gli utenti /var/lib/jenkins/users
per iniziare da zero.
<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>
Per ripristinarlo senza disabilitare la sicurezza se si utilizzano le autorizzazioni matrice (probabilmente facilmente adattabili ad altri metodi di accesso):
config.xml
, impostare disableSignup
su false
.config.xml
, duplicare una delle <permission>hudson.model.Hudson.Administer:username</permission>
righe e sostituirla username
con il nuovo utente.disableSignup
torna su true
in config.xml
.Pulizia opzionale:
<permission>
linea temporanea in config.xml
.Nessun titolo è stato danneggiato durante questa risposta.
Per disabilitare la sicurezza di Jenkins in semplici passaggi in Linux, eseguire questi comandi:
sudo ex +g/useSecurity/d +g/authorizationStrategy/d -scwq /var/lib/jenkins/config.xml
sudo /etc/init.d/jenkins restart
Rimuoverà useSecurity
e le authorizationStrategy
linee dal tuo config.xml
file di configurazione di root e riavvierà Jenkins.
Vedi anche: disabilitare la sicurezza sul sito Web di Jenkins
Dopo aver ottenuto l'accesso a Jenkins, è possibile riattivare la sicurezza nella pagina Configura sicurezza globale selezionando Controllo accesso / Area sicurezza . Dopo di che non dimenticare di creare l'utente amministratore .
Per caso, ti blocchi accidentalmente fuori da Jenkins a causa di un errore di autorizzazione e non hai accesso sul lato server per passare all'utente o alla radice jenkins ... Puoi fare un lavoro in Jenkins e aggiungerlo allo script Shell:
sed -i 's/<useSecurity>true/<useSecurity>false/' ~/config.xml
Quindi fai clic su Crea ora e riavvia Jenkins (o il server, se necessario!)
ProjectMatrixAuthorization
. Quando apporto la modifica e riavvio Jenkins vedo un'eccezione Java nell'interfaccia utente di Jenkins. Per risolvere questo problema, ho rimosso anche la riga con authorizationStrategy
ed era di nuovo a posto. Jenkins l'ha letta all'inizio come un tag vuoto.
Possiamo reimpostare la password lasciando attiva la sicurezza.
Il file config.xml in / var / lib / Jenkins / users / admin / agisce in qualche modo come il file / etc / shadow sistemi simili a Linux o UNIX o il file SAM in Windows, nel senso che memorizza l'hash del password dell'account.
Se è necessario reimpostare la password senza accedere, è possibile modificare questo file e sostituire il vecchio hash con uno nuovo generato da bcrypt:
$ pip install bcrypt
$ python
>>> import bcrypt
>>> bcrypt.hashpw("yourpassword", bcrypt.gensalt(rounds=10, prefix=b"2a"))
'YOUR_HASH'
Questo genererà il tuo hash, con il prefisso 2a, il prefisso corretto per gli hash Jenkins.
Ora modifica il file config.xml:
...
<passwordHash>#jbcrypt:REPLACE_THIS</passwordHash>
...
Una volta inserito il nuovo hash, reimposta Jenkins:
(se si utilizza un sistema con systemd):
sudo systemctl restart Jenkins
Ora puoi accedere e non hai lasciato il sistema aperto per un secondo.
Per rimuovere la protezione predefinita per jenkins nel sistema operativo Windows,
Puoi attraversare il file Config.xml creato all'interno di /users/{UserName}/.jenkins.
All'interno di questo file è possibile modificare il codice da
<useSecurity>true</useSecurity>
Per,
<useSecurity>false</useSecurity>
1 prima controlla la posizione se installi war o Linux o windows in base a quello
per esempio in caso di guerra sotto Linux e per utente amministratore
/home/"User_NAME"/.jenkins/users/admin/config.xml
vai a questo tag dopo #jbcrypt:
<passwordHash>#jbcrypt:$2a$10$3DzCGLQr2oYXtcot4o0rB.wYi5kth6e45tcPpRFsuYqzLZfn1pcWK</passwordHash>
cambiare questa password utilizzando qualsiasi sito Web per il generatore di hash bcrypt
https://www.dailycred.com/article/bcrypt-calculator
assicurati che inizi con $ 2a perché usa questo jenkens
step-1: vai nella directory cd .jenkins / secrets quindi otterrai un 'inizialeAdminPassword'.
step-2: nano initialAdminPassword
otterrai una password
cambiando l' <useSecurity>true</useSecurity>
ad <useSecurity>false</useSecurity>
non sarà sufficiente, è necessario rimuovere <authorizationStrategy>
e <securityRealm>
elementi troppo e riavviare il server di Jenkins facendo sudo service jenkins restart
.
ricorda che, impostato <usesecurity>
su false
può causare solo un problema, poiché queste istruzioni sono menzionate nella loro documentazione ufficiale qui .
sudo su -
xclip -sel clip < /var/lib/jenkins/secrets/initialAdminPassword
ctrl + v
sulla casella di inserimento password.$ sudo apt-get install xclip
Jenkins su KUBENETES e Docker
In caso di Jenkins su un contenitore gestito da un kubernetes POD è un po 'più complessa da quando: kubectl exec PODID --namespace=jenkins -it -- /bin/bash
vi permetterà di accedere direttamente al contenitore in esecuzione Jenkins, ma non si avrà accesso root , sudo
, vi
e molti comandi non sono disponibili e quindi una soluzione alternativa è necessario.
Utilizzare kubectl describe pod [...]
per trovare il nodo che esegue il Pod e l'ID contenitore(docker://...)
SSH
nel nododocker exec -ti -u root -- /bin/bash
per accedere al contenitore con i privilegi di rootapt-get update
sudo apt-get install vim
La seconda differenza è che il file di configurazione Jenkins si trova in un percorso diverso che corrisponde al punto di montaggio del volume persistente, ovvero che /var/jenkins_home
questa posizione potrebbe cambiare in futuro, verificarlo in esecuzione df
.
Quindi disabilitare la sicurezza: cambia da vero a falso nel /var/jenkins_home/jenkins/config.xml
file.
<useSecurity>false</useSecurity>
Ora è sufficiente riavviare Jenkins, azione che causerà la morte del contenitore e del Pod, che verrà creato nuovamente in pochi secondi con la configurazione aggiornata (e tutte le possibilità come vi, aggiornamento cancellate) grazie al volume persistente.
L'intera soluzione è stata testata su Google Kubernetes Engine.
AGGIORNAMENTO
Si noti che è possibile eseguire anche ps -aux
la password in testo normale viene mostrato anche senza accesso root.
jenkins@jenkins-87c47bbb8-g87nw:/$ps -aux
[...]
jenkins [..] -jar /usr/share/jenkins/jenkins.war --argumentsRealm.passwd.jenkins=password --argumentsRealm.roles.jenkins=admin
[...]
Molte volte non avrai le autorizzazioni per modificare il file config.xml.
La cosa più semplice sarebbe tornare indietro config.xml
ed eliminare usando il comando sudo.
Riavvia i jenkins usando il comando sudo /etc/init.d/jenkins restart
Ciò disabiliterà tutta la sicurezza in Jenkins e l'opzione di accesso scomparirebbe
Utilizzando bcrypt è possibile risolvere questo problema. Estendere la risposta @Reem per qualcuno che sta cercando di automatizzare il processo usando bash e 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
Ho mantenuto la password codificata qui, ma può essere un input dell'utente a seconda del requisito. Assicurati anche di aggiungere che sleep
altrimenti qualsiasi altro comando che ruota attorno a Jenkins fallirà.
Per disabilitare semplicemente sia la sicurezza che la procedura guidata di avvio, utilizzare la proprietà JAVA:
-Djenkins.install.runSetupWizard=false
La cosa bella di questo è che puoi usarlo in un'immagine Docker in modo tale che il tuo contenitore si avvii sempre immediatamente senza alcuna schermata di accesso:
# Dockerfile
FROM jenkins/jenkins:lts
ENV JAVA_OPTS -Djenkins.install.runSetupWizard=false
Si noti che, come menzionato da altri, il file config.xml di Jenkins è /var/jenkins_home
nell'immagine, ma l'utilizzo sed
per modificarlo dal file Dockerfile ha esito negativo, poiché (presumibilmente) il file config.xml non esiste fino all'avvio del server.
Ho avuto un problema simile e in seguito alla risposta di ArtB,
Ho scoperto che il mio utente non aveva le configurazioni corrette. quindi quello che ho fatto:
Nota: la modifica manuale di tali file XML è rischiosa. Fallo a tuo rischio e pericolo. Da quando ero già bloccato, non avevo molto da perdere. AFAIK Nel peggiore dei casi avrei cancellato il file ~ / .jenkins / config.xml come precedentemente menzionato.
**> 1. ssh alla macchina jenkins
- cd ~ / .jenkins (suppongo che alcune installazioni lo mettano in /var/lib/jenkins/config.xml, ma non nel mio caso)
- vi config.xml, e sotto il tag licenseStrategy xml, aggiungi la sezione seguente (ho appena usato il mio nome utente invece di "put-your-username")
- riavvia jenkins. nel mio caso come servizio root tomcat7 stop; ; avviare il servizio tomcat7
- Prova ad accedere nuovamente. (ha funzionato per me) **
sotto
Inserisci:
<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>
Ora puoi andare in diverse direzioni. Ad esempio ho avuto l'integrazione con Github oauth, quindi avrei potuto provare a sostituire l'autorizzazione Strategy con qualcosa di simile al seguente:
Nota :, ha funzionato nel mio caso perché avevo uno specifico plugin github oauth che era già configurato. Quindi è più rischioso rispetto alla soluzione precedente.
<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>
Modifica il file $ JENKINS_HOME / config.xml e cambia la configurazione della sicurezza con questo:
<authorizationStrategy class="hudson.security.AuthorizationStrategy$Unsecured"/>
Dopodiché riavvia Jenkins.
Per chi utilizza macOS, la nuova versione può essere installata da homebrew. quindi per riposare, questa riga di comando deve usare:
brew services restart jenkins-lts