Câu trả lời:
Giải pháp đơn giản nhất là vô hiệu hóa hoàn toàn bảo mật - thay đổi true
thành false
trong /var/lib/jenkins/config.xml
tệp.
<useSecurity>true</useSecurity>
Sau đó, chỉ cần khởi động lại Jenkins, bởi
sudo service jenkins restart
Và sau đó vào bảng quản trị và thiết lập mọi thứ một lần nữa.
Nếu bạn trong trường hợp đang chạy Jenkins bên trong pod k8 từ docker, đó là trường hợp của tôi và không thể chạy service
lệnh, thì bạn có thể khởi động lại Jenkins bằng cách xóa pod:
kubectl delete pod <jenkins-pod-name>
Khi lệnh được ban hành, k8s sẽ chấm dứt nhóm cũ và bắt đầu một nhóm mới.
sudo service jenkins restart
find / -name "config.xml"
trong thiết bị đầu cuối của bạn.
Một cách khác là chỉnh sửa thủ công tệp cấu hình cho người dùng của bạn (ví dụ: /var/lib/jenkins/users/username/config.xml) và cập nhật nội dung của passwordHash :
<passwordHash>#jbcrypt:$2a$10$razd3L1aXndFfBNHO95aj.IVrFydsxkcQCcLmujmFQzll3hcUrY7S</passwordHash>
Khi bạn đã hoàn thành việc này, chỉ cần khởi động lại Jenkins và đăng nhập bằng mật khẩu này:
test
<passwordHash>
thẻ xml là con của <hudson.security.HudsonPrivateSecurityRealm_-Details>
. Nhìn vào người dùng quản trị mặc định để biết ý tưởng về cấu trúc XML tổng.
Tôi tìm thấy tệp trong câu hỏi nằm trong / var / lib / jenkins được gọi là config.xml, sửa đổi đã khắc phục sự cố.
/Applications/jenkins-2.19.3-0/apps/jenkins/jenkins_home/users/admin/config.xml
Phần <passwordHash>
tử trong users/<username>/config.xml
sẽ chấp nhận dữ liệu của định dạng
salt:sha256("password{salt}")
Vì vậy, nếu muối của bạn là bar
và mật khẩu của bạn foo
thì bạn có thể sản xuất SHA256 như thế này:
echo -n 'foo{bar}' | sha256sum
Bạn sẽ nhận được 7f128793bc057556756f4195fb72cdc5bd8c5a74dee655a6bfb59b4a4c4f4349
kết quả. Lấy băm và đặt nó với muối vào <passwordHash>
:
<passwordHash>bar:7f128793bc057556756f4195fb72cdc5bd8c5a74dee655a6bfb59b4a4c4f4349</passwordHash>
Khởi động lại Jenkins, sau đó thử đăng nhập bằng mật khẩu foo
. Sau đó đặt lại mật khẩu của bạn để một cái gì đó khác. (Jenkins sử dụng bcrypt theo mặc định và một vòng SHA256 không phải là cách an toàn để lưu trữ mật khẩu. Bạn sẽ nhận được bcrypt băm được lưu trữ khi bạn đặt lại mật khẩu.)
Trong El-Capitan config.xml không thể tìm thấy tại
/ var / lib / jenkins /
Nó có sẵn trong
~ / .jenkins
sau đó, như đã đề cập, hãy mở tệp config.xml và thực hiện các thay đổi sau
Trong này thay thế <useSecurity>true</useSecurity>
bằng<useSecurity>false</useSecurity>
Xóa <authorizationStrategy>
và<securityRealm>
Lưu nó và khởi động lại jenkins ( sudo service jenkins restart )
Câu trả lời về sửa đổi là chính xác. Tuy nhiên, tôi nghĩ rằng nó nên được đề cập /var/lib/jenkins/config.xml
trông giống như thế này nếu bạn đã kích hoạt "Chiến lược ủy quyền ma trận dựa trên dự án". Xóa /var/lib/jenkins/config.xml
và khởi động lại jenkins cũng thực hiện các mẹo. Tôi cũng đã xóa người dùng /var/lib/jenkins/users
để bắt đầu lại từ đầu.
<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>
Để đặt lại nó mà không vô hiệu hóa bảo mật nếu bạn đang sử dụng quyền ma trận (có thể dễ dàng thích ứng với các phương thức đăng nhập khác):
config.xml
, đặt disableSignup
thành false
.config.xml
, sao chép một trong các <permission>hudson.model.Hudson.Administer:username</permission>
dòng và thay thế username
bằng người dùng mới.disableSignup
trở lại true
trong config.xml
.Dọn dẹp tùy chọn:
<permission>
dòng tạm thời trong config.xml
.Không có chứng khoán bị tổn hại trong câu trả lời này.
Để vô hiệu hóa bảo mật Jenkins trong các bước đơn giản trong Linux, hãy chạy các lệnh sau:
sudo ex +g/useSecurity/d +g/authorizationStrategy/d -scwq /var/lib/jenkins/config.xml
sudo /etc/init.d/jenkins restart
Nó sẽ xóa useSecurity
và authorizationStrategy
dòng từ config.xml
tập tin cấu hình gốc của bạn và khởi động lại Jenkins của bạn.
Xem thêm: Vô hiệu hóa bảo mật tại trang web Jenkins
Sau khi có quyền truy cập vào Jenkins, bạn có thể bật lại bảo mật trong trang Cấu hình Bảo mật Toàn cầu của mình bằng cách chọn Vương quốc Kiểm soát truy cập / Bảo mật . Sau đó, đừng quên tạo người dùng quản trị .
Trong trường hợp bạn vô tình tự khóa mình khỏi Jenkins do lỗi cấp phép và bạn không có quyền truy cập phía máy chủ để chuyển sang người dùng jenkins hoặc root ... Bạn có thể tạo một công việc trong Jenkins và thêm điều này vào Shell Script:
sed -i 's/<useSecurity>true/<useSecurity>false/' ~/config.xml
Sau đó nhấp vào Xây dựng ngay và khởi động lại Jenkins (hoặc máy chủ nếu bạn cần!)
ProjectMatrixAuthorization
. Khi tôi thực hiện thay đổi và khởi động lại Jenkins, tôi thấy một ngoại lệ Java trong Jenkins-UI. Để khắc phục điều này, tôi cũng gỡ bỏ dòng này authorizationStrategy
và nó đã ổn trở lại. Jenkins đã đánh dấu nó vào lần bắt đầu tiếp theo dưới dạng một thẻ trống.
Chúng tôi có thể thiết lập lại mật khẩu trong khi vẫn bảo mật.
Tệp config.xml trong / var / lib / Jenkins / users / admin / hành động giống như tệp / etc / bóng của các hệ thống giống như Linux hoặc UNIX hoặc tệp SAM trong Windows, theo nghĩa là nó lưu trữ hàm băm của mật khẩu của tài khoản.
Nếu bạn cần đặt lại mật khẩu mà không cần đăng nhập, bạn có thể chỉnh sửa tệp này và thay thế hàm băm cũ bằng mật khẩu mới được tạo từ bcrypt:
$ pip install bcrypt
$ python
>>> import bcrypt
>>> bcrypt.hashpw("yourpassword", bcrypt.gensalt(rounds=10, prefix=b"2a"))
'YOUR_HASH'
Điều này sẽ xuất ra hàm băm của bạn, với tiền tố 2a, tiền tố chính xác cho băm Jenkins.
Bây giờ, hãy chỉnh sửa tệp config.xml:
...
<passwordHash>#jbcrypt:REPLACE_THIS</passwordHash>
...
Khi bạn chèn hàm băm mới, hãy đặt lại Jenkins:
(nếu bạn đang ở trên một hệ thống có systemd):
sudo systemctl restart Jenkins
Bây giờ bạn có thể đăng nhập và bạn không để hệ thống của mình mở trong một giây.
Trước tiên hãy kiểm tra vị trí nếu bạn cài đặt war hoặc Linux hoặc windows dựa trên đó
ví dụ: nếu chiến tranh trong Linux và cho người dùng quản trị
/home/"User_NAME"/.jenkins/users/admin/config.xml
đi tới thẻ này sau #jbcrypt:
<passwordHash>#jbcrypt:$2a$10$3DzCGLQr2oYXtcot4o0rB.wYi5kth6e45tcPpRFsuYqzLZfn1pcWK</passwordHash>
thay đổi mật khẩu này bằng cách sử dụng bất kỳ trang web nào cho trình tạo hàm bcrypt
https://www.dailycred.com/article/bcrypt-calculator
hãy chắc chắn rằng nó bắt đầu với $ 2a vì điều này jenkens sử dụng
bước 1: đi tới thư mục cd .jenkins / secret sau đó bạn sẽ nhận được một 'initAdminPassword'.
bước 2: nano initAdminPassword
bạn sẽ nhận được một mật khẩu
thay đổi <useSecurity>true</useSecurity>
thành <useSecurity>false</useSecurity>
sẽ không đủ, bạn cũng nên loại bỏ <authorizationStrategy>
và <securityRealm>
các yếu tố và khởi động lại máy chủ jenkins của bạn bằng cách thực hiện sudo service jenkins restart
.
hãy nhớ điều này, được đặt <usesecurity>
thành false
chỉ có thể gây ra sự cố cho bạn, vì các hướng dẫn này được đề cập trong tài liệu chính thức của họ ở đây .
sudo su -
xclip -sel clip < /var/lib/jenkins/secrets/initialAdminPassword
ctrl + v
vào hộp nhập mật khẩu.$ sudo apt-get install xclip
Jenkins trên KUBENETES và Docker
Trong trường hợp của Jenkins trên một container bởi một quản lý Kubernetes POD là phức tạp hơn một chút kể từ khi: kubectl exec PODID --namespace=jenkins -it -- /bin/bash
bạn sẽ cho phép truy cập trực tiếp vào container chạy Jenkins, nhưng bạn sẽ không có quyền truy cập root , sudo
, vi
và nhiều lệnh không có sẵn và do đó một workaround là cần thiết.
Sử dụng kubectl describe pod [...]
để tìm nút chạy Pod của bạn và ID container(docker://...)
SSH
vào nútdocker exec -ti -u root -- /bin/bash
để truy cập vào container với quyền Rootapt-get update
sudo apt-get install vim
Sự khác biệt thứ hai là tệp cấu hình Jenkins được đặt trong một đường dẫn khác tương ứng với điểm lắp của âm lượng liên tục, nghĩa là /var/jenkins_home
vị trí này có thể thay đổi trong tương lai, kiểm tra xem nó có chạy không df
.
Sau đó vô hiệu hóa bảo mật - thay đổi true thành false trong /var/jenkins_home/jenkins/config.xml
tệp.
<useSecurity>false</useSecurity>
Bây giờ đã đủ để khởi động lại Jenkins, hành động sẽ khiến container và Pod chết, nó sẽ được tạo lại sau vài giây với cấu hình được cập nhật (và tất cả các cơ hội như vi, cập nhật bị xóa) nhờ vào khối lượng liên tục.
Toàn bộ giải pháp đã được thử nghiệm trên Google Kubernetes Engine.
CẬP NHẬT
Lưu ý rằng bạn cũng có thể chạy ps -aux
mật khẩu trong văn bản thuần túy được hiển thị ngay cả khi không có quyền truy cập root.
jenkins@jenkins-87c47bbb8-g87nw:/$ps -aux
[...]
jenkins [..] -jar /usr/share/jenkins/jenkins.war --argumentsRealm.passwd.jenkins=password --argumentsRealm.roles.jenkins=admin
[...]
Rất nhiều lần bạn sẽ không có quyền chỉnh sửa tệp config.xml.
Điều đơn giản nhất là quay lại config.xml
và xóa bằng lệnh sudo.
Khởi động lại jenkins bằng lệnh sudo /etc/init.d/jenkins restart
Điều này sẽ vô hiệu hóa tất cả bảo mật trong Jenkins và tùy chọn đăng nhập sẽ biến mất
Sử dụng bcrypt bạn có thể giải quyết vấn đề này. Mở rộng câu trả lời @Reem cho ai đó đang cố gắng tự động hóa quy trình bằng bash và 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
Tôi đã giữ mật khẩu được mã hóa cứng ở đây nhưng nó có thể là đầu vào của người dùng tùy theo yêu cầu. Ngoài ra, hãy đảm bảo thêm rằng sleep
nếu không bất kỳ lệnh nào khác xoay quanh Jenkins sẽ thất bại.
Để đơn giản vô hiệu hóa cả bảo mật và trình hướng dẫn khởi động, hãy sử dụng thuộc tính JAVA:
-Djenkins.install.runSetupWizard=false
Điều thú vị ở đây là bạn có thể sử dụng nó trong hình ảnh Docker sao cho container của bạn sẽ luôn khởi động ngay lập tức mà không cần màn hình đăng nhập:
# Dockerfile
FROM jenkins/jenkins:lts
ENV JAVA_OPTS -Djenkins.install.runSetupWizard=false
Lưu ý rằng, như được đề cập bởi những người khác, tệp cấu /var/jenkins_home
hình Jenkins có trong hình ảnh, nhưng việc sử dụng sed
để sửa đổi nó từ Dockerfile không thành công, vì (có lẽ) cấu hình không tồn tại cho đến khi máy chủ khởi động.
Tôi đã có một vấn đề tương tự, và sau khi trả lời từ ArtB,
Tôi thấy rằng người dùng của tôi không có cấu hình phù hợp. vì vậy những gì tôi đã làm:
Lưu ý: sửa đổi thủ công các tệp XML như vậy là rủi ro. Làm điều đó có nguy cơ của riêng bạn. Vì tôi đã bị khóa, tôi không có gì để mất. AFAIK Trường hợp xấu nhất tôi đã xóa tệp ~ / .jenkins / config.xml như bài đăng đã đề cập.
**> 1. ssh vào máy jenkins
- cd ~ / .jenkins (Tôi đoán rằng một số cài đặt đặt nó dưới /var/lib/jenkins/config.xml, nhưng không phải trong trường hợp của tôi)
- vi config.xml và dưới thẻ xml ủy quyền, thêm phần bên dưới (chỉ sử dụng tên người dùng của tôi thay vì "put-your-username")
- khởi động lại jenkins. trong trường hợp của tôi là dịch vụ root tomcat7 dừng; ; dịch vụ tomcat7 bắt đầu
- Hãy thử đăng nhập lại. (đã làm cho tôi)**
Dưới
thêm vào:
<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>
Bây giờ, bạn có thể đi đến các hướng khác nhau. Ví dụ: tôi đã tích hợp github oauth, vì vậy tôi có thể đã cố gắng thay thế ủy quyềnStrargety bằng một cái gì đó như dưới đây:
Lưu ý:, Nó hoạt động trong trường hợp của tôi vì tôi có một plugin github oauth cụ thể đã được cấu hình. Vì vậy, nó là rủi ro hơn so với giải pháp trước đây.
<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>
Đối với một người đang sử dụng macOS, phiên bản mới có thể được cài đặt bằng homebrew. Vì vậy, để nghỉ ngơi, dòng lệnh này phải được sử dụng:
brew services restart jenkins-lts