Odpowiedzi:
Najprostszym rozwiązaniem jest całkowite wyłączenie zabezpieczeń - zmiana true
na false
w /var/lib/jenkins/config.xml
pliku.
<useSecurity>true</useSecurity>
Następnie uruchom ponownie Jenkinsa przez
sudo service jenkins restart
Następnie przejdź do panelu administracyjnego i ustaw wszystko jeszcze raz.
Jeśli na wszelki wypadek uruchamiasz Jenkinsa wewnątrz k8s pod z dokera, co jest w moim przypadku i nie może działać service
polecenia, możesz po prostu zrestartować Jenkins poprzez usunięcie kapsuły:
kubectl delete pod <jenkins-pod-name>
Po wydaniu polecenia k8s zakończy działanie starej kapsuły i uruchomi nową.
sudo service jenkins restart
find / -name "config.xml"
w twoim terminalu.
Innym sposobem może być ręczna edycja pliku konfiguracyjnego dla użytkownika (np. /Var/lib/jenkins/users/username/config.xml) i zaktualizowanie zawartości passwordHash :
<passwordHash>#jbcrypt:$2a$10$razd3L1aXndFfBNHO95aj.IVrFydsxkcQCcLmujmFQzll3hcUrY7S</passwordHash>
Po wykonaniu tej czynności ponownie uruchom Jenkins i zaloguj się przy użyciu tego hasła:
test
<passwordHash>
tag xml jest dzieckiem <hudson.security.HudsonPrivateSecurityRealm_-Details>
. Spójrz na domyślnego użytkownika administratora, aby dowiedzieć się o całkowitej strukturze XML.
Znalazłem plik znajdujący się w / var / lib / jenkins o nazwie config.xml, modyfikując to, rozwiązując problem.
/Applications/jenkins-2.19.3-0/apps/jenkins/jenkins_home/users/admin/config.xml
<passwordHash>
Elementem users/<username>/config.xml
będzie akceptować dane o formacie
salt:sha256("password{salt}")
Tak więc, jeśli twoja sól bar
i twoje hasło to foo
, możesz wyprodukować SHA256 w następujący sposób:
echo -n 'foo{bar}' | sha256sum
Powinieneś dostać 7f128793bc057556756f4195fb72cdc5bd8c5a74dee655a6bfb59b4a4c4f4349
w wyniku. Weź skrót i włóż go razem z solą do <passwordHash>
:
<passwordHash>bar:7f128793bc057556756f4195fb72cdc5bd8c5a74dee655a6bfb59b4a4c4f4349</passwordHash>
Uruchom ponownie Jenkins, a następnie spróbuj zalogować się przy użyciu hasła foo
. Następnie zresetuj hasło do czegoś innego. (Jenkins domyślnie korzysta z bcrypt, a jedna runda SHA256 nie jest bezpiecznym sposobem przechowywania haseł. Otrzymasz skrót bcrypt po zresetowaniu hasła).
W El-Capitan config.xml nie można znaleźć na
/ var / lib / jenkins /
Jest dostępny w
~ / .jenkins
następnie, jak wspomniano wcześniej, otwórz plik config.xml i wprowadź następujące zmiany
W ten wymienić <useSecurity>true</useSecurity>
z<useSecurity>false</useSecurity>
Usuń <authorizationStrategy>
i<securityRealm>
Zapisz go i zrestartuj jenkins ( sudo service jenkins restart )
Odpowiedź na modyfikację była poprawna. Myślę jednak, że należy wspomnieć, że /var/lib/jenkins/config.xml
wygląda to tak, jeśli aktywowano „Strategię autoryzacji matrycy opartej na projekcie”. Usuwanie /var/lib/jenkins/config.xml
i ponowne uruchamianie Jenkins również załatwia sprawę. Usunąłem również użytkowników, /var/lib/jenkins/users
aby zacząć od zera.
<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>
Aby go zresetować bez wyłączania zabezpieczeń, jeśli korzystasz z uprawnień macierzy (prawdopodobnie łatwo można je dostosować do innych metod logowania):
config.xml
ustawiono disableSignup
nafalse
.config.xml
zduplikuj jedną z <permission>hudson.model.Hudson.Administer:username</permission>
linii i zamieńusername
go nowym użytkownikiem.disableSignup
z powrotem true
wconfig.xml
.Opcjonalne czyszczenie:
<permission>
wiersz w config.xml
.Żadne papiery wartościowe nie zostały naruszone podczas tej odpowiedzi.
Aby wyłączyć zabezpieczenia Jenkins w prostych krokach w systemie Linux, uruchom następujące polecenia:
sudo ex +g/useSecurity/d +g/authorizationStrategy/d -scwq /var/lib/jenkins/config.xml
sudo /etc/init.d/jenkins restart
Usunie useSecurity
i authorizationStrategy
linie z twojego config.xml
pliku konfiguracyjnym korzeni i ponownie uruchom Jenkins.
Zobacz także: Wyłącz zabezpieczenia na stronie Jenkins
Po uzyskaniu dostępu do Jenkins możesz ponownie włączyć zabezpieczenia na stronie Konfiguruj zabezpieczenia globalne , wybierając dziedzinę Kontrola dostępu / Bezpieczeństwo . Potem nie zapomnij utworzyć użytkownika administratora .
Na przykład przypadkowo blokujesz się z Jenkinsa z powodu błędu uprawnień i nie masz dostępu do serwera, aby przełączyć się na użytkownika lub roota Jenkinsa. Możesz wykonać pracę w Jenkinsie i dodać to do Skryptu powłoki:
sed -i 's/<useSecurity>true/<useSecurity>false/' ~/config.xml
Następnie kliknij Build Now i zrestartuj Jenkins (lub serwer, jeśli potrzebujesz!)
ProjectMatrixAuthorization
. Kiedy dokonam zmiany i zrestartuję Jenkins, widzę wyjątek Java w interfejsie Jenkins-UI. Aby to naprawić, usunąłem również wiersz z authorizationStrategy
i znów było w porządku. Jenkins odczytał go przy następnym uruchomieniu jako pusty tag.
Możemy zresetować hasło, pozostawiając włączone zabezpieczenia.
Plik config.xml w / var / lib / Jenkins / users / admin / działa podobnie jak plik / etc / shadow Linux lub UNIX-podobny system lub plik SAM w Windows, w tym sensie, że przechowuje skrót hasło do konta.
Jeśli musisz zresetować hasło bez logowania, możesz edytować ten plik i zamienić stary skrót na nowy wygenerowany z bcrypt:
$ pip install bcrypt
$ python
>>> import bcrypt
>>> bcrypt.hashpw("yourpassword", bcrypt.gensalt(rounds=10, prefix=b"2a"))
'YOUR_HASH'
Spowoduje to wyświetlenie Twojego skrótu, z prefiksem 2a, poprawnym prefiksem dla skrótów Jenkins.
Teraz edytuj plik config.xml:
...
<passwordHash>#jbcrypt:REPLACE_THIS</passwordHash>
...
Po wstawieniu nowego skrótu zresetuj Jenkins:
(jeśli korzystasz z systemu z systemd):
sudo systemctl restart Jenkins
Możesz się teraz zalogować i przez chwilę nie pozostawiłeś systemu otwartego.
1 najpierw sprawdź lokalizację, jeśli na tej podstawie zainstalujesz war, Linux lub Windows
na przykład jeśli wojna pod Linuksem i dla administratora
/home/"User_NAME"/.jenkins/users/admin/config.xml
przejdź do tego znacznika po #jbcrypt:
<passwordHash>#jbcrypt:$2a$10$3DzCGLQr2oYXtcot4o0rB.wYi5kth6e45tcPpRFsuYqzLZfn1pcWK</passwordHash>
zmień to hasło za pomocą dowolnej witryny generatora skrótów bcrypt
https://www.dailycred.com/article/bcrypt-calculator
upewnij się, że zaczyna się od 2 $, ponieważ ten jenkens używa
krok 1: przejdź do katalogu cd .jenkins / secrets, a następnie otrzymasz „initialAdminPassword”.
krok 2: nano initialAdminPassword
dostaniesz hasło
zmieniając <useSecurity>true</useSecurity>
się <useSecurity>false</useSecurity>
nie będzie wystarczające, należy usunąć <authorizationStrategy>
i <securityRealm>
elementy zbyt i zrestartować serwer Jenkins robiąc sudo service jenkins restart
.
tym pamiętać, ustawiony <usesecurity>
na false
tylko może powodować problem dla ciebie, ponieważ instrukcje te są wymienione w oficjalnej dokumentacji Thier tutaj .
sudo su -
xclip -sel clip < /var/lib/jenkins/secrets/initialAdminPassword
ctrl + v
pole wprowadzania hasła.$ sudo apt-get install xclip
Jenkins zamiast KUBENETES i Docker
W przypadku Jenkins nad pojemnikiem zarządzanego przez Kubernetes POD jest nieco bardziej skomplikowana od: kubectl exec PODID --namespace=jenkins -it -- /bin/bash
pozwolisz, aby uzyskać dostęp bezpośrednio do pojemnika z systemem Jenkins, ale nie będzie miał dostępu do konta roota , sudo
, vi
i wiele poleceń nie są dostępne i dlatego obejście jest potrzebne.
Służy kubectl describe pod [...]
do znajdowania węzła uruchamiającego zasobnik i identyfikatora kontenera(docker://...)
SSH
do węzładocker exec -ti -u root -- /bin/bash
aby uzyskać dostęp do kontenera z uprawnieniami rootowaniaapt-get update
sudo apt-get install vim
Druga różnica polega na tym, że plik konfiguracyjny Jenkins jest umieszczony w innej ścieżce, która odpowiada punktowi montowania trwałego woluminu, tj. /var/jenkins_home
Ta lokalizacja może ulec zmianie w przyszłości, sprawdź, czy jest uruchomiony df
.
Następnie wyłącz zabezpieczenia - zmień w /var/jenkins_home/jenkins/config.xml
pliku wartość true na false .
<useSecurity>false</useSecurity>
Teraz wystarczy zrestartować Jenkins, akcję, która spowoduje, że pojemnik i kapsuła zginą, utworzy się ponownie w ciągu kilku sekund ze zaktualizowaną konfiguracją (i całą szansą, jak vi, aktualizacja skasowana) dzięki stałemu woluminowi.
Całe rozwiązanie zostało przetestowane na Google Kubernetes Engine.
AKTUALIZACJA
Zauważ, że równie dobrze możesz uruchomić ps -aux
hasło w postaci zwykłego tekstu, nawet bez dostępu użytkownika root.
jenkins@jenkins-87c47bbb8-g87nw:/$ps -aux
[...]
jenkins [..] -jar /usr/share/jenkins/jenkins.war --argumentsRealm.passwd.jenkins=password --argumentsRealm.roles.jenkins=admin
[...]
Wiele razy nie będziesz mieć uprawnień do edycji pliku config.xml.
Najprostszą rzeczą byłoby wycofanie się config.xml
i usunięcie za pomocą polecenia sudo.
Uruchom ponownie jenkinsa za pomocą polecenia sudo /etc/init.d/jenkins restart
Spowoduje to wyłączenie wszystkich zabezpieczeń w Jenkins, a opcja logowania zniknie
Za pomocą bcrypt możesz rozwiązać ten problem. Rozszerzenie odpowiedzi @Reem dla kogoś, kto próbuje zautomatyzować proces za pomocą bash i 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
Hasło zostało tutaj zapisane na stałe, ale może być wprowadzane przez użytkownika w zależności od wymagań. Pamiętaj też, aby dodać, że w sleep
przeciwnym razie każde inne polecenie dotyczące Jenkins zawiedzie.
Aby po prostu wyłączyć zarówno zabezpieczenia, jak i kreatora uruchamiania, użyj właściwości JAVA:
-Djenkins.install.runSetupWizard=false
Zaletą tego jest to, że możesz użyć go w obrazie Docker, dzięki czemu Twój kontener zawsze uruchomi się natychmiast bez ekranu logowania:
# Dockerfile
FROM jenkins/jenkins:lts
ENV JAVA_OPTS -Djenkins.install.runSetupWizard=false
Zwróć uwagę, że jak wspomnieli inni, plik config.xml w Jenkins znajduje się w /var/jenkins_home
obrazie, ale użycie go sed
do modyfikacji z pliku Docker nie powiedzie się, ponieważ (prawdopodobnie) plik config.xml nie istnieje do momentu uruchomienia serwera.
Miałem podobny problem i po odpowiedzi ArtB
Odkryłem, że mój użytkownik nie miał odpowiednich konfiguracji. więc co zrobiłem:
Uwaga: ręczne modyfikowanie takich plików XML jest ryzykowne. Zrób to na własne ryzyko. Ponieważ byłem już zamknięty, nie miałem wiele do stracenia. AFAIK W najgorszym przypadku usunąłbym plik ~ / .jenkins / config.xml jak wspomniano wcześniej.
**> 1. ssh do maszyny Jenkins
- cd ~ / .jenkins (Myślę, że niektóre instalacje umieszczają go w katalogu /var/lib/jenkins/config.xml, ale nie w moim przypadku)
- vi config.xml i w ramach tagu XML authenticationStrategy dodaj poniższą sekcję (właśnie użyłem mojej nazwy użytkownika zamiast „put-your-username”)
- uruchom ponownie jenkins. w moim przypadku jako usługa root tomcat7 stop; ; usługa tomcat7 start
- Spróbuj zalogować się ponownie. (pracował dla mnie) **
pod
Dodaj:
<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>
Teraz możesz iść w różne strony. Na przykład miałem integrację z github oauth, więc mogłem spróbować zastąpić strategię autoryzacji czymś takim jak poniżej:
Uwaga: działało w moim przypadku, ponieważ miałem już skonfigurowaną wtyczkę github oauth. Jest to więc bardziej ryzykowne niż poprzednie rozwiązanie.
<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>
Edytuj plik $ JENKINS_HOME / config.xml i zmień konfigurację zabezpieczeń za pomocą:
<authorizationStrategy class="hudson.security.AuthorizationStrategy$Unsecured"/>
Po tym zrestartuj Jenkins.
Dla tych, którzy używają macOS, nową wersję można po prostu zainstalować przez Homebrew. więc do odpoczynku ten wiersz poleceń musi używać:
brew services restart jenkins-lts