回答:
最も簡単な解決策は、セキュリティを完全に無効true
にfalse
すること/var/lib/jenkins/config.xml
です。ファイルに変更します。
<useSecurity>true</useSecurity>
次に、Jenkinsを再起動します。
sudo service jenkins restart
そして、管理パネルに行き、すべてをもう一度設定します。
私の場合、Dockerからk8sポッド内でJenkinsを実行している場合、service
コマンドを実行できない場合は、ポッドを削除するだけでJenkinsを再起動できます。
kubectl delete pod <jenkins-pod-name>
コマンドが発行されると、k8sは古いポッドを終了し、新しいポッドを開始します。
sudo service jenkins restart
find / -name "config.xml"
端末でconfig.xmlを使用してそれを見つけることができない場合。
もう1つの方法は、ユーザーの構成ファイル(/var/lib/jenkins/users/username/config.xmlなど)を手動で編集し、passwordHashの内容を更新することです。
<passwordHash>#jbcrypt:$2a$10$razd3L1aXndFfBNHO95aj.IVrFydsxkcQCcLmujmFQzll3hcUrY7S</passwordHash>
これが完了したら、Jenkinsを再起動し、このパスワードを使用してログインします。
test
<passwordHash>
XMLタグは、の子です<hudson.security.HudsonPrivateSecurityRealm_-Details>
。全体的なXML構造については、デフォルトのadminユーザーを参照してください。
/ 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}")
したがって、salt bar
とpasswordがfoo
次の場合、次のようにSHA256を生成できます。
echo -n 'foo{bar}' | sha256sum
7f128793bc057556756f4195fb72cdc5bd8c5a74dee655a6bfb59b4a4c4f4349
結果として得られるはずです。ハッシュを取り、それに塩を入れてください<passwordHash>
:
<passwordHash>bar:7f128793bc057556756f4195fb72cdc5bd8c5a74dee655a6bfb59b4a4c4f4349</passwordHash>
Jenkinsを再起動してから、パスワードでログインしてみてくださいfoo
。次に、パスワードを別のパスワードにリセットします。(Jenkinsはデフォルトでbcryptを使用しており、1ラウンドの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
jenkinsを削除して再起動することも有効です。また、ユーザーを削除して、/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
複製1、<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 Webサイトでセキュリティを無効にする
Jenkinsへのアクセス権を取得した後、[ グローバルセキュリティの構成]ページで[ アクセス制御/セキュリティレルム]を選択して、セキュリティを再度有効にできます。その後、管理者ユーザーを作成することを忘れないでください。
権限の間違いのために誤って自分をJenkinsからロックアウトし、jenkinsユーザーまたはrootに切り替えるサーバー側のアクセス権がない場合... 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秒間開いたままにしませんでした。
1最初にwar、Linux、またはそれに基づくWindowsをインストールする場所を確認します
たとえば、Linuxでの管理ユーザー向けの戦争の場合
/home/"User_NAME"/.jenkins/users/admin/config.xml
#jbcryptの後にこのタグに移動します。
<passwordHash>#jbcrypt:$2a$10$3DzCGLQr2oYXtcot4o0rB.wYi5kth6e45tcPpRFsuYqzLZfn1pcWK</passwordHash>
bcryptハッシュジェネレーターに任意のWebサイトを使用してこのパスワードを変更する
https://www.dailycred.com/article/bcrypt-calculator
これが$ 2aで始まることを確認してください。これは、jenkensが使用する1つです。
ステップ1:cd .jenkins / secretsディレクトリに移動すると、「initialAdminPassword」が取得されます。
ステップ2:nano initialAdminPassword
パスワードを取得します
変更<useSecurity>true</useSecurity>
するために<useSecurity>false</useSecurity>
は十分ではありません、あなたは削除する必要があります<authorizationStrategy>
し、<securityRealm>
要素すぎと実行して、ジェンキンスサーバーを再起動します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
以下の場合はジェンキンスによって管理されるコンテナの上にKubernetes PODので、もう少し複雑です:kubectl exec PODID --namespace=jenkins -it -- /bin/bash
あなたが直接ジェンキンスを実行しているコンテナへのアクセスを許可しますが、あなたはrootアクセスを持っていないだろう、sudo
、vi
と多くのコマンドが利用できないため、回避策必要です。
kubectl describe pod [...]
ポッドを実行しているノードとコンテナIDを見つけるために使用する(docker://...)
SSH
ノードにdocker exec -ti -u root -- /bin/bash
ルート権限でコンテナにアクセスするために実行しますapt-get update
sudo apt-get install vim
2番目の違いは、Jenkins構成ファイルが永続ボリュームのマウントポイントに対応する別のパスに配置されていることです。つまり/var/jenkins_home
、この場所は将来変更される可能性があります。実行されていることを確認してくださいdf
です。。。
次に、セキュリティを無効にし/var/jenkins_home/jenkins/config.xml
ます。ファイルでtrueをfalseに変更します。
<useSecurity>false</useSecurity>
これで、Jenkinsを再起動するだけで十分です。コンテナとポッドを停止させるアクションです。永続ボリュームのおかげで、構成が更新されて(そしてviのようなすべての可能性が更新されて)数秒で再び作成されます。
ソリューション全体は、Google Kubernetes Engineでテストされています。
UPDATEps -aux
パスワードをプレーンテキストで
実行することもでき、rootアクセスがなくても表示されることに注意してください。
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コマンドを使用して、取り消して削除することです。
コマンドを使用してジェンキンスを再起動します 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
ますが、(おそらく)サーバーが起動するまでconfig.xmlが存在しないため、Dockerfileからの変更に使用できないことに注意してください。
同様の問題があり、ArtBからの返信に続いて、
ユーザーに適切な構成がないことがわかりました。だから私がしたこと:
注:このようなXMLファイルを手動で変更することは危険です。自己責任で行ってください。私はすでにロックアウトされていたので、失うものはほとんどありませんでした。AFAIK最悪の場合、前の投稿で述べたように、〜/ .jenkins / config.xmlファイルを削除していたでしょう。
**> 1. jenkinsマシンへのSSH
- cd〜/ .jenkins(インストールによっては/var/lib/jenkins/config.xmlの下に配置されていると思いますが、私の場合はそうではありません)
- vi config.xml、およびauthorizationStrategy xmlタグの下に、以下のセクションを追加します(「put-your-username」の代わりにユーザー名を使用しただけです)
- ジェンキンスを再起動します。私の場合、ルートサービスとしてtomcat7を停止します。; service tomcat7 start
- もう一度ログインしてください。(私のために働いた)**
下
追加:
<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>