Ответы:
Самое простое решение , чтобы полностью отключить систему безопасности - изменение true
в false
в /var/lib/jenkins/config.xml
файле.
<useSecurity>true</useSecurity>
Затем просто перезапустите Jenkins,
sudo service jenkins restart
А затем зайдите в админ-панель и установите все заново.
Если вы в случае запускаете свой Jenkins в модуле k8s из докера, что в моем случае, и не можете запустить service
команду, то вы можете просто перезапустить Jenkins, удалив модуль:
kubectl delete pod <jenkins-pod-name>
Как только команда будет введена, k8s прекратит работу старого модуля и начнет новый.
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, затем попробуйте войти в систему с паролем foo
. Затем сбросьте свой пароль на что-то другое. (Дженкинс использует bcrypt по умолчанию, и один раунд SHA256 не является безопасным способом хранения паролей. Вы получите хэш bcrypt, сохраненный при сбросе пароля.)
В El-Capitan config.xml нельзя найти по адресу
/ Var / Библиотека / 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
, дублируйте одну из <permission>hudson.model.Hudson.Administer:username</permission>
строк и замените username
новым пользователем.disableSignup
обратно true
в config.xml
.Дополнительная уборка:
<permission>
строку в config.xml
.Во время этого ответа ценные бумаги не пострадали.
Чтобы отключить защиту Jenkins простыми шагами в Linux, выполните следующие команды:
sudo ex +g/useSecurity/d +g/authorizationStrategy/d -scwq /var/lib/jenkins/config.xml
sudo /etc/init.d/jenkins restart
Он удалит useSecurity
и authorizationStrategy
строки из вашего config.xml
корневого конфигурационного файла и перезапустит ваш Jenkins.
Смотрите также: Отключить защиту на сайте Jenkins
Получив доступ к Jenkins, вы можете снова включить защиту на странице настройки глобальной безопасности , выбрав Область управления доступом / безопасностью . После этого не забудьте создать пользователя с правами администратора .
На случай, если вы случайно заблокируете себя из Jenkins из-за ошибки разрешения, и у вас нет доступа на стороне сервера, чтобы переключиться на пользователя jenkins или root ... Вы можете сделать работу в Jenkins и добавить это в сценарий оболочки:
sed -i 's/<useSecurity>true/<useSecurity>false/' ~/config.xml
Затем нажмите Build Now и перезапустите Jenkins (или сервер, если вам нужно!)
ProjectMatrixAuthorization
. Когда я делаю изменения и перезапускаю Jenkins, я вижу исключение Java в Jenkins-UI. Чтобы исправить это, я удалил также строку с, authorizationStrategy
и снова все было в порядке. Дженкинс прочитал это при следующем запуске как пустой тег.
Мы можем сбросить пароль, оставив защиту включенной.
Файл config.xml в / var / lib / Jenkins / users / admin / действует примерно так же, как файл / etc / shadow в Linux или UNIX-подобных системах или файл SAM в Windows, в том смысле, что он хранит хэш пароль учетной записи.
Если вам нужно сбросить пароль без входа в систему, вы можете отредактировать этот файл и заменить старый хэш новым, сгенерированным из bcrypt:
$ pip install bcrypt
$ python
>>> import bcrypt
>>> bcrypt.hashpw("yourpassword", bcrypt.gensalt(rounds=10, prefix=b"2a"))
'YOUR_HASH'
Это выведет ваш хеш с префиксом 2a, правильным префиксом для хешей Jenkins.
Теперь отредактируйте файл config.xml:
...
<passwordHash>#jbcrypt:REPLACE_THIS</passwordHash>
...
Как только вы вставите новый хеш, сбросьте Jenkins:
(если вы используете систему с systemd):
sudo systemctl restart Jenkins
Теперь вы можете войти в систему, и вы не оставили свою систему открытой ни на секунду.
1 сначала проверьте местоположение, если вы устанавливаете war или Linux или windows на основе этого
например, если война под Linux и для администратора
/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, потому что этот Jenkens использует
Шаг 1: перейдите в каталог cd .jenkins / secrets, после чего вы получите «initialAdminPassword».
Шаг 2: нано инициал AdminPassword
вы получите пароль
изменяя <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
Дженкинс над КУБЕНЕТЕСОМ и Докером
В случае Дженкинс над контейнером , управляемым Kubernetes POD является немного более сложным , так как: kubectl exec PODID --namespace=jenkins -it -- /bin/bash
позволите доступ непосредственно к контейнеру работает Дженкинс, но вы не будете иметь доступ к корневому , sudo
, vi
и многие команды не доступны , и поэтому обходной путь нужно.
Используйте, kubectl describe pod [...]
чтобы найти узел, на котором запущен ваш Pod, и идентификатор контейнера.(docker://...)
SSH
в узелdocker exec -ti -u root -- /bin/bash
для доступа к контейнеру с привилегиями Rootapt-get update
sudo apt-get install vim
Второе отличие состоит в том, что файл конфигурации Jenkins размещается по другому пути, который соответствует точке подключения постоянного тома, т. Е. /var/jenkins_home
Это расположение может измениться в будущем, проверьте его работу df
.
Затем отключите защиту - измените истину на ложь в /var/jenkins_home/jenkins/config.xml
файле.
<useSecurity>false</useSecurity>
Теперь достаточно перезапустить Jenkins, действие, которое приведет к смерти контейнера и модуля Pod, оно будет создано снова через несколько секунд с обновленной конфигурацией (и все шансы, такие как vi, обновление стерты) благодаря постоянному тому.
Все решение было протестировано на Google Kubernetes Engine.
ОБНОВЛЕНИЕ
Обратите внимание, что вы также можете запустить ps -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, вы можете решить эту проблему. Расширение ответа @Reem для тех, кто пытается автоматизировать процесс, используя bash и 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
Я сохранил пароль в жестком месте, но это может быть ввод пользователя в зависимости от требований. Также обязательно добавьте, что в sleep
противном случае любая другая команда, вращающаяся вокруг Дженкинса, потерпит неудачу.
Чтобы очень просто отключить безопасность и мастер запуска, используйте свойство 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»)
- перезапустите Дженкинс. в моём случае как root служба 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>
Отредактируйте файл $ JENKINS_HOME / config.xml и измените конфигурацию безопасности следующим образом:
<authorizationStrategy class="hudson.security.AuthorizationStrategy$Unsecured"/>
После этого перезапустите Дженкинс.
Для тех, кто использует macOS, новую версию просто можно установить с помощью homebrew. поэтому для отдыха эта командная строка должна использовать:
brew services restart jenkins-lts