Jawaban:
Solusi paling sederhana adalah sepenuhnya menonaktifkan keamanan - ubah true
ke false
dalam /var/lib/jenkins/config.xml
file.
<useSecurity>true</useSecurity>
Kemudian restart Jenkins, dengan
sudo service jenkins restart
Dan kemudian pergi ke panel admin dan atur semuanya sekali lagi.
Jika Anda sedang menjalankan Jenkins Anda di dalam pod k8s dari buruh pelabuhan, yang merupakan kasus saya dan tidak dapat menjalankan service
perintah, maka Anda bisa memulai kembali Jenkins dengan menghapus pod:
kubectl delete pod <jenkins-pod-name>
Setelah perintah dikeluarkan, k8 akan menghentikan pod lama dan memulai yang baru.
sudo service jenkins restart
find / -name "config.xml"
di terminal Anda.
Satu cara lain adalah mengedit file konfigurasi secara manual untuk pengguna Anda (mis. /Var/lib/jenkins/users/username/config.xml) dan memperbarui konten kata sandiHash :
<passwordHash>#jbcrypt:$2a$10$razd3L1aXndFfBNHO95aj.IVrFydsxkcQCcLmujmFQzll3hcUrY7S</passwordHash>
Setelah Anda selesai melakukannya, cukup restart Jenkins dan masuk menggunakan kata sandi ini:
test
<passwordHash>
tag xml adalah anak <hudson.security.HudsonPrivateSecurityRealm_-Details>
. Lihatlah pengguna admin default untuk gagasan tentang struktur XML total.
Saya menemukan file tersebut terletak di / var / lib / jenkins bernama config.xml, memodifikasi yang memperbaiki masalah.
/Applications/jenkins-2.19.3-0/apps/jenkins/jenkins_home/users/admin/config.xml
The <passwordHash>
elemen dalam users/<username>/config.xml
akan menerima data dari format
salt:sha256("password{salt}")
Jadi, jika garam Anda bar
dan kata sandi foo
Anda, maka Anda dapat menghasilkan SHA256 seperti ini:
echo -n 'foo{bar}' | sha256sum
Anda harus mendapatkan 7f128793bc057556756f4195fb72cdc5bd8c5a74dee655a6bfb59b4a4c4f4349
hasilnya. Ambil hash dan masukkan garam ke dalam <passwordHash>
:
<passwordHash>bar:7f128793bc057556756f4195fb72cdc5bd8c5a74dee655a6bfb59b4a4c4f4349</passwordHash>
Mulai ulang Jenkins, lalu coba masuk dengan kata sandi foo
. Kemudian atur ulang kata sandi Anda ke sesuatu yang lain. (Jenkins menggunakan bcrypt secara default, dan satu putaran SHA256 bukan cara aman untuk menyimpan kata sandi. Anda akan mendapatkan hash bcrypt yang disimpan ketika Anda mengatur ulang kata sandi Anda.)
Di El-Capitan config.xml tidak dapat ditemukan di
/ var / lib / jenkins /
Ini tersedia di
~ / .jenkins
kemudian setelah itu seperti yang disebutkan lainnya buka file config.xml dan buat perubahan berikut
Dalam hal ini ganti <useSecurity>true</useSecurity>
dengan<useSecurity>false</useSecurity>
Hapus <authorizationStrategy>
dan<securityRealm>
Simpan dan mulai ulang jenkins ( sudo service jenkins restart )
Jawaban tentang memodifikasi itu benar. Namun, saya pikir harus disebutkan yang /var/lib/jenkins/config.xml
terlihat seperti ini jika Anda telah mengaktifkan "Strategi Otorisasi Matriks Berbasis Proyek". Menghapus /var/lib/jenkins/config.xml
dan memulai ulang jenkins juga bermanfaat. Saya juga menghapus pengguna /var/lib/jenkins/users
untuk memulai dari awal.
<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>
Untuk mengatur ulang tanpa menonaktifkan keamanan jika Anda menggunakan izin matriks (mungkin mudah beradaptasi dengan metode login lain):
config.xml
, atur disableSignup
ke false
.config.xml
, duplikat salah satu <permission>hudson.model.Hudson.Administer:username</permission>
baris dan ganti username
dengan pengguna baru.disableSignup
kembali ke true
dalam config.xml
.Pembersihan opsional:
<permission>
baris sementara di config.xml
.Tidak ada sekuritas yang dirugikan selama jawaban ini.
Untuk menonaktifkan keamanan Jenkins dalam langkah-langkah sederhana di Linux, jalankan perintah ini:
sudo ex +g/useSecurity/d +g/authorizationStrategy/d -scwq /var/lib/jenkins/config.xml
sudo /etc/init.d/jenkins restart
Ini akan menghapus useSecurity
dan authorizationStrategy
baris dari Andaconfig.xml
file konfigurasi root dan restart Jenkins Anda.
Lihat juga: Nonaktifkan keamanan di situs web Jenkins
Setelah mendapatkan akses ke Jenkins, Anda dapat mengaktifkan kembali keamanan di halaman Konfigurasi Keamanan Global Anda dengan memilih Access Control / Security Realm . Setelah daripada jangan lupa buat pengguna admin .
Jika Anda tidak sengaja mengunci diri dari Jenkins karena kesalahan izin, dan Anda tidak memiliki akses sisi server untuk beralih ke pengguna atau root jenkins ... Anda dapat membuat pekerjaan di Jenkins dan menambahkan ini ke Shell Script:
sed -i 's/<useSecurity>true/<useSecurity>false/' ~/config.xml
Kemudian klik Bangun Sekarang dan mulai ulang Jenkins (atau server jika perlu!)
ProjectMatrixAuthorization
. Ketika saya melakukan perubahan dan me-restart Jenkins saya melihat pengecualian Java di Jenkins-UI. Untuk memperbaikinya, saya juga menghapus garis authorizationStrategy
dan tidak apa-apa lagi. Jenkins membacanya di awal berikutnya sebagai tag kosong.
Kami dapat mengatur ulang kata sandi sambil membiarkan keamanan tetap menyala.
File config.xml di / var / lib / Jenkins / users / admin / bertindak seperti file / etc / shadow Linux atau sistem mirip UNIX atau file SAM di Windows, dalam arti bahwa ia menyimpan hash dari kata sandi akun.
Jika Anda perlu mengatur ulang kata sandi tanpa masuk, Anda dapat mengedit file ini dan mengganti hash lama dengan yang baru yang dihasilkan dari bcrypt:
$ pip install bcrypt
$ python
>>> import bcrypt
>>> bcrypt.hashpw("yourpassword", bcrypt.gensalt(rounds=10, prefix=b"2a"))
'YOUR_HASH'
Ini akan menampilkan hash Anda, dengan awalan 2a, awalan yang benar untuk hash Jenkins.
Sekarang, edit file config.xml:
...
<passwordHash>#jbcrypt:REPLACE_THIS</passwordHash>
...
Setelah Anda memasukkan hash baru, setel ulang Jenkins:
(jika Anda menggunakan sistem dengan systemd):
sudo systemctl restart Jenkins
Anda sekarang dapat masuk, dan Anda tidak membiarkan sistem Anda terbuka untuk sesaat.
1 pertama periksa lokasi jika Anda menginstal perang atau Linux atau windows berdasarkan itu
misalnya jika perang di bawah Linux dan untuk pengguna admin
/home/"User_NAME"/.jenkins/users/admin/config.xml
buka tag ini setelah #jbcrypt:
<passwordHash>#jbcrypt:$2a$10$3DzCGLQr2oYXtcot4o0rB.wYi5kth6e45tcPpRFsuYqzLZfn1pcWK</passwordHash>
ubah kata sandi ini dengan menggunakan situs web apa pun untuk generator hash bcrypt
https://www.dailycred.com/article/bcrypt-calculator
pastikan itu dimulai dengan $ 2a karena ini menggunakan jenkens
langkah-1: buka direktori cd .jenkins / secrets maka Anda akan mendapatkan 'initialAdminPassword'.
langkah-2: nano initialAdminPassword
Anda akan mendapatkan kata sandi
mengubah <useSecurity>true</useSecurity>
ke <useSecurity>false</useSecurity>
tidak akan cukup, Anda harus menghapus <authorizationStrategy>
dan <securityRealm>
elemen juga dan restart server jenkins Anda dengan melakukan sudo service jenkins restart
.
ingat ini, diatur <usesecurity>
untuk false
hanya dapat menyebabkan masalah bagi Anda, karena petunjuk ini disebutkan di mereka dokumentasi resmi di sini .
sudo su -
xclip -sel clip < /var/lib/jenkins/secrets/initialAdminPassword
ctrl + v
pada kotak input kata sandi.$ sudo apt-get install xclip
Jenkins atas KUBENETES dan Docker
Dalam kasus Jenkins lebih wadah dikelola oleh Kubernetes POD adalah sedikit lebih kompleks karena: kubectl exec PODID --namespace=jenkins -it -- /bin/bash
akan Anda memungkinkan untuk akses langsung ke wadah berjalan Jenkins, tetapi Anda tidak akan memiliki akses root , sudo
,vi
dan banyak perintah yang tidak tersedia dan karena itu solusi dibutuhkan.
Gunakan kubectl describe pod [...]
untuk menemukan simpul yang menjalankan Pod dan ID kontainer Anda(docker://...)
SSH
ke dalam simpuldocker exec -ti -u root -- /bin/bash
untuk mengakses wadah dengan hak akses Rootapt-get update
sudo apt-get install vim
Perbedaan kedua adalah bahwa file konfigurasi Jenkins ditempatkan di jalur yang berbeda yang sesuai dengan titik pemasangan volume persisten, yaitu /var/jenkins_home
, lokasi ini mungkin berubah di masa depan, periksa apakah berjalan df
.
Kemudian nonaktifkan keamanan - ubah true ke false dalam /var/jenkins_home/jenkins/config.xml
file.
<useSecurity>false</useSecurity>
Sekarang cukup untuk me-restart Jenkins, tindakan yang akan menyebabkan wadah dan Pod mati, itu akan dibuat lagi dalam beberapa detik dengan konfigurasi diperbarui (dan semua kemungkinan seperti vi, pembaruan terhapus) berkat volume yang persisten.
Seluruh solusi telah diuji di Google Kubernetes Engine.
UPDATE
Perhatikan bahwa Anda juga dapat menjalankan ps -aux
kata sandi dalam teks biasa yang ditampilkan bahkan tanpa akses root.
jenkins@jenkins-87c47bbb8-g87nw:/$ps -aux
[...]
jenkins [..] -jar /usr/share/jenkins/jenkins.war --argumentsRealm.passwd.jenkins=password --argumentsRealm.roles.jenkins=admin
[...]
Banyak kali Anda tidak akan memiliki izin untuk mengedit file config.xml.
Hal paling sederhana adalah mengambil kembali config.xml
dan menghapus menggunakan perintah sudo.
Mulai ulang jenkins menggunakan perintah sudo /etc/init.d/jenkins restart
Ini akan menonaktifkan semua keamanan di Jenkins dan opsi masuk akan hilang
Menggunakan bcrypt Anda dapat mengatasi masalah ini. Memperluas jawaban @Reem untuk seseorang yang mencoba mengotomatiskan proses menggunakan bash dan 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
Saya telah menyimpan kata sandi di sini, tetapi ini bisa menjadi input pengguna tergantung pada kebutuhan. Juga pastikan untuk menambahkan bahwa sleep
jika tidak ada perintah lain yang berputar di sekitar Jenkins akan gagal.
Untuk menonaktifkan keamanan dan wisaya startup dengan sangat sederhana, gunakan properti JAVA:
-Djenkins.install.runSetupWizard=false
Hal yang menyenangkan tentang ini adalah Anda dapat menggunakannya dalam gambar Docker sehingga wadah Anda akan selalu mulai segera tanpa layar masuk:
# Dockerfile
FROM jenkins/jenkins:lts
ENV JAVA_OPTS -Djenkins.install.runSetupWizard=false
Perhatikan bahwa, seperti yang disebutkan oleh orang lain, config.xml Jenkins ada di /var/jenkins_home
dalam gambar, tetapi menggunakan sed
untuk memodifikasinya dari Dockerfile gagal, karena (mungkin) config.xml tidak ada sampai server mulai.
Saya memiliki masalah serupa, dan mengikuti balasan dari ArtB,
Saya menemukan bahwa pengguna saya tidak memiliki konfigurasi yang tepat. jadi apa yang saya lakukan:
Catatan: memodifikasi file XML semacam itu secara manual berisiko. Lakukan dengan risiko Anda sendiri. Karena saya sudah dikunci, saya tidak akan rugi banyak. AFAIK Kasus terburuk saya akan menghapus file ~ / .jenkins / config.xml sebagai postingan sebelumnya.
**> 1. ssh ke mesin jenkins
- cd ~ / .jenkins (saya kira beberapa instalasi meletakkannya di /var/lib/jenkins/config.xml, tetapi tidak dalam kasus saya)
- vi config.xml, dan di bawah tag xml authorizationStrategy, tambahkan bagian di bawah ini (hanya menggunakan nama pengguna saya alih-alih "put-your-username")
- restart jenkins. dalam kasus saya sebagai layanan root tomcat7 berhenti; ; layanan tomcat7 mulai
- Coba masuk lagi. (bekerja untuk saya) **
dibawah
Menambahkan:
<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>
Sekarang, Anda dapat pergi ke arah yang berbeda. Misalnya saya memiliki integrasi github oauth, jadi saya bisa mencoba mengganti otorisasiStrategi dengan sesuatu seperti di bawah ini:
Catatan :, Ini berfungsi dalam kasus saya karena saya mempunyai plugin khusus github oauth yang sudah dikonfigurasi. Jadi itu lebih berisiko daripada solusi sebelumnya.
<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>
Edit file $ JENKINS_HOME / config.xml dan ubah konfigurasi de security dengan ini:
<authorizationStrategy class="hudson.security.AuthorizationStrategy$Unsecured"/>
Setelah itu restart Jenkins.
Untuk orang yang menggunakan macOS, versi baru bisa diinstal oleh homebrew. jadi untuk istirahat, baris perintah ini harus menggunakan:
brew services restart jenkins-lts