답변:
가장 간단한 해결책은 보안을 완전히 비활성화 true
하는 것 false
입니다 /var/lib/jenkins/config.xml
. 파일 에서 변경 하십시오.
<useSecurity>true</useSecurity>
그런 다음 Jenkins를 다시 시작하십시오.
sudo service jenkins restart
그런 다음 관리자 패널로 이동하여 모든 것을 다시 한 번 설정하십시오.
내 경우에 도커의 k8s 포드 내에서 Jenkins를 실행하는 경우 service
명령을 실행할 수 없으면 포드를 삭제하여 Jenkins를 다시 시작할 수 있습니다.
kubectl delete pod <jenkins-pod-name>
명령이 실행되면 k8은 이전 포드를 종료하고 새 포드를 시작합니다.
sudo service jenkins restart
find / -name "config.xml"
터미널에서 사용 합니다.
다른 방법은 사용자의 구성 파일 (예 : /var/lib/jenkins/users/username/config.xml)을 수동으로 편집하고 passwordHash 의 내용을 업데이트하는 것입니다 .
<passwordHash>#jbcrypt:$2a$10$razd3L1aXndFfBNHO95aj.IVrFydsxkcQCcLmujmFQzll3hcUrY7S</passwordHash>
이 작업을 완료하면 Jenkins를 다시 시작하고 다음 비밀번호를 사용하여 로그인하십시오.
test
<passwordHash>
XML 태그의 자식입니다 <hudson.security.HudsonPrivateSecurityRealm_-Details>
. 전체 XML 구조에 대한 아이디어는 기본 관리자를 참조하십시오.
문제의 파일을 / var / lib / jenkins에있는 config.xml이라는 파일에서 발견하여 문제를 해결했습니다.
/Applications/jenkins-2.19.3-0/apps/jenkins/jenkins_home/users/admin/config.xml
의 <passwordHash>
요소 users/<username>/config.xml
는 형식의 데이터를 받아들입니다.
salt:sha256("password{salt}")
따라서 소금이 bar
있고 암호가 있으면 foo
다음과 같이 SHA256을 생성 할 수 있습니다.
echo -n 'foo{bar}' | sha256sum
7f128793bc057556756f4195fb72cdc5bd8c5a74dee655a6bfb59b4a4c4f4349
결과적으로 얻어야 합니다. 해시를 가져 와서 소금으로 넣으십시오 <passwordHash>
.
<passwordHash>bar:7f128793bc057556756f4195fb72cdc5bd8c5a74dee655a6bfb59b4a4c4f4349</passwordHash>
Jenkins를 다시 시작한 다음 password로 로그인하십시오 foo
. 그런 다음 비밀번호를 다른 것으로 재설정하십시오. Jenkins는 기본적으로 bcrypt를 사용하며 한 라운드의 SHA256은 비밀번호를 저장하는 안전한 방법이 아닙니다. 비밀번호를 재설정하면 bcrypt 해시가 저장됩니다.
El-Capitan에서는 config.xml 을 찾을 수 없습니다.
/ var / lib / jenkins /
사용 가능
~ / .jenkins
그런 다음 언급 한대로 config.xml 파일을 열고 다음을 변경하십시오.
이에서 교체 <useSecurity>true</useSecurity>
로<useSecurity>false</useSecurity>
제거 <authorizationStrategy>
하고<securityRealm>
저장하고 jenkins를 다시 시작하십시오 ( sudo service jenkins restart )
수정에 대한 답변이 정확했습니다. 그러나 /var/lib/jenkins/config.xml
"프로젝트 기반 매트릭스 인증 전략"을 활성화 한 경우 다음과 같은 내용이 언급되어야한다고 생각합니다 . /var/lib/jenkins/config.xml
젠킨스를 삭제 하고 다시 시작하면 트릭이 수행됩니다. 또한 /var/lib/jenkins/users
처음부터 시작하기 위해 사용자를 삭제했습니다 .
<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>
매트릭스 권한을 사용하는 경우 보안을 비활성화하지 않고 재설정하려면 (다른 로그인 방법에 쉽게 적용 할 수 있음) :
config.xml
로 설정 disableSignup
하십시오 false
.config.xml
의 하나의 복제, <permission>hudson.model.Hudson.Administer:username</permission>
라인 및 교체username
새 사용자와 함께.disableSignup
다시로 설정하십시오 true
.config.xml
.선택적 정리 :
<permission>
줄을 삭제하십시오 config.xml
.이 답변 동안 유가 증권은 피해를 입지 않았습니다.
Linux에서 간단한 단계로 Jenkins 보안을 사용하지 않으려면 다음 명령을 실행하십시오.
sudo ex +g/useSecurity/d +g/authorizationStrategy/d -scwq /var/lib/jenkins/config.xml
sudo /etc/init.d/jenkins restart
루트 구성 파일 에서 줄을 제거 useSecurity
하고 Jenkins를 다시 시작합니다.authorizationStrategy
config.xml
참조 : Jenkins 웹 사이트에서 보안 비활성화
Jenkins에 대한 액세스 권한을 얻은 후 액세스 제어 / 보안 영역 을 선택하여 글로벌 보안 구성 페이지 에서 보안을 다시 사용할 수 있습니다 . 관리자 사용자 를 만드는 것을 잊지 마십시오 .
실수로 권한 실수로 Jenkins에서 실수로 자신을 잠그고 jenkins 사용자 또는 루트로 전환하기 위해 서버 측 액세스 권한이 없습니다 ... Jenkins에서 작업을 수행하여 셸 스크립트에 추가 할 수 있습니다.
sed -i 's/<useSecurity>true/<useSecurity>false/' ~/config.xml
그런 다음 지금 빌드를 클릭하고 Jenkins (또는 필요한 경우 서버)를 다시 시작하십시오.
ProjectMatrixAuthorization
. 변경을 수행하고 Jenkins를 다시 시작하면 Jenkins-UI에 Java 예외가 표시됩니다. 이 문제를 해결하기 위해 라인을 제거 authorizationStrategy
했는데 다시 괜찮 았습니다. Jenkins는 다음에 빈 태그로 읽었습니다.
보안을 유지 한 상태에서 비밀번호를 재설정 할 수 있습니다.
/ var / lib / Jenkins / users / admin /의 config.xml 파일은 / etc / shadow 파일 Linux 또는 UNIX와 유사한 시스템 또는 Windows의 SAM 파일과 같은 역할을합니다. 계정 비밀번호.
로그인하지 않고 비밀번호를 재설정해야하는 경우이 파일을 편집하고 이전 해시를 bcrypt에서 생성 된 새 것으로 교체 할 수 있습니다.
$ pip install bcrypt
$ python
>>> import bcrypt
>>> bcrypt.hashpw("yourpassword", bcrypt.gensalt(rounds=10, prefix=b"2a"))
'YOUR_HASH'
그러면 Jenkins 해시의 올바른 접두사 접두어 2a가있는 해시가 출력됩니다.
이제 config.xml 파일을 편집하십시오.
...
<passwordHash>#jbcrypt:REPLACE_THIS</passwordHash>
...
새 해시를 삽입하면 Jenkins를 재설정하십시오.
(systemd 시스템을 사용하는 경우) :
sudo systemctl restart Jenkins
이제 로그인 할 수 있으며 잠시 동안 시스템을 열어 두지 않았습니다.
1 전쟁 또는 Linux 또는 Windows를 기반으로 설치하는 경우 먼저 위치 확인
예를 들어 Linux 및 관리자의 경우 war
/home/"User_NAME"/.jenkins/users/admin/config.xml
#jbcrypt 다음에이 태그로 이동하십시오 :
<passwordHash>#jbcrypt:$2a$10$3DzCGLQr2oYXtcot4o0rB.wYi5kth6e45tcPpRFsuYqzLZfn1pcWK</passwordHash>
bcrypt 해시 생성기에 웹 사이트를 사용하여이 비밀번호를 변경하십시오.
https://www.dailycred.com/article/bcrypt-calculator
이 젠켄 스가 사용 하는 $ 2a로 시작하십시오.
를 변경하는 것만 <useSecurity>true</useSecurity>
으로 <useSecurity>false</useSecurity>
는 충분하지 않으므로 <authorizationStrategy>
및 <securityRealm>
요소도 제거 하고을 수행하여 jenkins 서버를 다시 시작해야합니다 sudo service jenkins restart
.
설정이 기억 <usesecurity>
에 false
이 지침은, 자신의 공식 문서에서 언급되기 때문에, 당신을 위해 문제가 발생할 수 있습니다 만 여기 .
sudo su -
xclip -sel clip < /var/lib/jenkins/secrets/initialAdminPassword
ctrl + v
비밀번호 입력 상자를 누릅니다.$ sudo apt-get install xclip
KUBENETES 및 Docker의 Jenkins
의 경우 젠킨스 a로 관리하는 컨테이너를 통해 는 Kubernetes POD 때문에 좀 더 복잡하다 : kubectl exec PODID --namespace=jenkins -it -- /bin/bash
당신이 직접 젠킨스를 실행하는 컨테이너에 액세스 할 수 있습니다,하지만 당신은 루트 액세스 할 수 없습니다 , sudo
,vi
많은 명령을 따라서 해결 방법을 사용할 수 없습니다 및 필요합니다.
kubectl describe pod [...]
포드를 실행하는 노드와 컨테이너 ID를 찾는 데 사용(docker://...)
SSH
노드로docker exec -ti -u root -- /bin/bash
루트 권한으로 컨테이너에 액세스하기 위해 실행apt-get update
sudo apt-get install vim
두 번째 차이점 은 Jenkins 구성 파일이 영구 볼륨의 마운트 지점에 해당하는 다른 경로에 배치된다는 것입니다. 즉 /var/jenkins_home
,이 위치는 나중에 변경 될 수 있습니다.df
. .
그런 다음 보안을 비활성화하십시오- /var/jenkins_home/jenkins/config.xml
파일 에서 true를 false로 변경 하십시오.
<useSecurity>false</useSecurity>
이제 컨테이너와 포드가 죽게하는 조치 인 Jenkins를 다시 시작하면 충분합니다. 지속적인 볼륨으로 인해 구성이 업데이트되고 (vi와 같은 모든 기회가 지워짐) 몇 초 후에 다시 생성됩니다.
전체 솔루션은 Google Kubernetes Engine에서 테스트되었습니다.
업데이트ps -aux
루트 액세스 권한이 없어도 일반 텍스트로 비밀번호를
실행할 수 있습니다.
jenkins@jenkins-87c47bbb8-g87nw:/$ps -aux
[...]
jenkins [..] -jar /usr/share/jenkins/jenkins.war --argumentsRealm.passwd.jenkins=password --argumentsRealm.roles.jenkins=admin
[...]
config.xml 파일을 편집 할 권한이없는 경우가 많습니다.
가장 간단한 방법은 config.xml
sudo 명령을 사용하여 취소 하고 삭제하는 것입니다.
명령을 사용하여 jenkins를 다시 시작하십시오. sudo /etc/init.d/jenkins restart
그러면 Jenkins의 모든 보안이 비활성화되고 로그인 옵션이 사라집니다.
bcrypt를 사용하면이 문제를 해결할 수 있습니다. bash와 python을 사용하여 프로세스를 자동화하려는 사람을 위해 @Reem 답변을 확장합니다.
#!/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
여기에 암호를 하드 코드로 유지했지만 요구 사항에 따라 사용자 입력이 될 수 있습니다. sleep
그렇지 않으면 Jenkins를 중심으로 회전하는 다른 명령이 실패 한다는 것을 추가하십시오 .
보안과 시작 마법사를 모두 비활성화하려면 JAVA 속성을 사용하십시오.
-Djenkins.install.runSetupWizard=false
이것에 대한 좋은 점은 컨테이너가 항상 로그인 화면없이 즉시 시작되도록 Docker 이미지에서 사용할 수 있다는 것입니다.
# Dockerfile
FROM jenkins/jenkins:lts
ENV JAVA_OPTS -Djenkins.install.runSetupWizard=false
다른 사람들이 언급했듯이 Jenkins config.xml은 /var/jenkins_home
이미지에 있지만 sed
Dockerfile에서 수정하는 데 사용 하는 것은 실패합니다. 아마도 서버가 시작될 때까지 config.xml이 없기 때문입니다.
비슷한 문제가 있었으며 ArtB의 답변에 따라
사용자가 올바른 구성을 가지고 있지 않다는 것을 알았습니다. 그래서 내가 한 일 :
참고 : 이러한 XML 파일을 수동으로 수정하는 것은 위험합니다. 위험을 감수하십시오. 이미 잠겨 있기 때문에 잃을 것이 많지 않았습니다. AFAIK 최악의 경우 ~ / .jenkins / config.xml 파일을 이전 게시물에서 삭제 한 것처럼 삭제했습니다.
**> 1. 젠킨스 머신에 ssh
- cd ~ / .jenkins (일부 설치에서는 /var/lib/jenkins/config.xml 아래에 있지만 내 경우에는 그렇지 않습니다)
- vi config.xml 및 authorizationStrategy xml 태그 아래에 아래 섹션을 추가하십시오 ( "put-your-username"대신 내 사용자 이름을 사용했습니다).
- 젠킨스를 다시 시작하십시오. 내 경우에는 루트 서비스 tomcat7 중지; ; 서비스 Tomcat7 시작
- 다시 로그인하십시오. (나를 위해 일했다) **
아래에
더하다:
<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>
이제 다른 방향으로 갈 수 있습니다. 예를 들어 github oauth 통합이 있었기 때문에 authorizationStrategy를 아래와 같이 바꿀 수있었습니다.
참고 : 이미 구성된 특정 github oauth 플러그인이 있기 때문에 제 경우에는 효과가있었습니다. 따라서 이전 솔루션보다 더 위험합니다.
<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>
macOS를 사용하는 사람은 homebrew로 새 버전을 설치할 수 있습니다. 따라서 휴식을 위해이 명령 행은 다음을 사용해야합니다.
brew services restart jenkins-lts