Как сбросить настройки безопасности Jenkins из командной строки?


217

Есть ли способ сбросить все (или просто отключить настройки безопасности) из командной строки без имени пользователя / пароля, поскольку мне удалось полностью заблокировать себя Jenkins?

Ответы:


275

Самое простое решение , чтобы полностью отключить систему безопасности - изменение 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 прекратит работу старого модуля и начнет новый.


3
Мне нужно было перезапустить Дженкинс, чтобы изменения вступили в силу.
— Или Арбель

12
sudo service jenkins restart
— MonoThreaded

10
Для тех, кто не может найти его, их config.xml используют find / -name "config.xml" в вашем терминале.
— Laser Hawk

После изменения пользовательского тега безопасности на false для перезапуска дженкинга из командной строки --- stackoverflow.com/questions/14869311/…
— Anurag_BEHS

1
Также файл может находиться в папке ~ / .jenkins /
— Андрей Абрамов

181

Другим способом было бы вручную отредактировать файл конфигурации для вашего пользователя (например, /var/lib/jenkins/users/username/config.xml) и обновить содержимое passwordHash :

<passwordHash>#jbcrypt:$2a$10$razd3L1aXndFfBNHO95aj.IVrFydsxkcQCcLmujmFQzll3hcUrY7S</passwordHash>

После этого просто перезапустите Jenkins и войдите в систему, используя этот пароль:

test

1
Что делать, если эта запись не существует - где на самом деле ее поставить?
— serup

2
<passwordHash>XML тег является дочерним <hudson.security.HudsonPrivateSecurityRealm_-Details>. Посмотрите на администратора по умолчанию для понимания общей структуры XML.
— ивандов

2
Это хорошее решение, обеспечивающее безопасность установки. Из любопытства, как можно создать этот хэш пароля?
— kontextify

Спасибо, это именно то, что мне было нужно!
— Мэтт Кавана

Изменение содержимого файла в C: \ Users \ <USER> \. Jenkins \ users \ admin помогло решить проблему
— Сакши Сингла,

45

Я обнаружил, что рассматриваемый файл находится в / var / lib / jenkins и называется config.xml, и это исправило проблему.


1
Я использую El-Capitan, и файл config.xml не может быть найден в этом месте
— Durai Amuthan.H

@ DuraiAmuthan.H Вы установили его с помощью стека битнами? Конфигурационный файл будет в/Applications/jenkins-2.19.3-0/apps/jenkins/jenkins_home/users/admin/config.xml
— siegy22

@ryanzec, ответ Nowakers использует тот же файл, но он лучше объяснен, вы должны принять его как правильный ответ.
— Katu

где мы найдем файл в hight sierra
— прабакаран iOS

44

<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, сохраненный при сбросе пароля.)


1
Это не похоже на работу. пример начинается с соли #jbscrypt и затем определяет поля шифрования $ 2a $ 10 $. Что это значит?
— Jrwren

Мой ответ сработал для меня. Дополнительные поля, которые вы видите, предназначены для другого формата хэша. Библиотека, которую Jenkins использует для обработки хешированных паролей, поддерживает более одного формата. Формат jbcrypt, о котором вы говорите, более безопасен, чем sha256 с солью, но формат соли sha256 + может быть легко получен из командной строки - напомним, что смысл упражнения - вернуться в Дженкинс, а затем изменить пароль от веб-интерфейса Jenkins.
— Uckelman

Это также не сработало для меня. Я постараюсь найти больше информации о bcrypt
— Laurent Picquet

это сработало для меня. Я использовал следующие команды: `` `PASSWORD_DIGEST =" $ (echo -n "$ {ADMIN_PASSWORD} {$ {SALT}}" | sha256sum | awk '{print $ 1}') "echo" дайджест пароля: $ PASSWORD_DIGEST "sed -i -e "s # <passwordHash>. * </ passwordHash> # <passwordHash> $ {SALT}: $ {PASSWORD_DIGEST} </ passwordHash> #" "/ usr / share / jenkins / ref / users / admin / config .xml "sed -i -e" s # <apiToken>. * </ apiToken> # <apiToken> $ {API_TOKEN} </ apiToken> # "" / usr / share / jenkins / ref / users / admin / config. xml "` ``
— Лоран Пикет

Спасибо мил. Использовал точно такие же значения и работал как шарм. Вернулся и сбросил пропуск.

26

В El-Capitan config.xml нельзя найти по адресу

/ Var / Библиотека / Jenkins /

Его доступно в

~ / .Jenkins

затем, как уже упоминалось, откройте файл config.xml и внесите следующие изменения

  • В этом заменить <useSecurity>true</useSecurity>на<useSecurity>false</useSecurity>

  • Удалить <authorizationStrategy>и<securityRealm>

  • Сохраните его и перезапустите jenkins ( sudo service jenkins restart )


Я не могу редактировать файл config.xml на самом деле. Когда я пытаюсь сохранить его с помощью vim, он выдает, что это файл только для чтения, и операция по его записи не разрешена.
— Эмджей

19

Ответ на изменение был правильным. Тем не менее, я думаю, стоит упомянуть, что это /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>

14

Чтобы сбросить его без отключения защиты, если вы используете разрешения матрицы (вероятно, легко адаптируемые к другим методам входа в систему):

  1. В config.xml, установите disableSignupна false.
  2. Перезапустите Дженкинс.
  3. Перейдите на веб-страницу Jenkins и зарегистрируйтесь с новым пользователем .
  4. В config.xml, дублируйте одну из <permission>hudson.model.Hudson.Administer:username</permission>строк и замените usernameновым пользователем.
  5. Если это частный сервер, установите disableSignupобратно trueв config.xml.
  6. Перезапустите Дженкинс.
  7. Перейдите на веб-страницу Jenkins и войдите в систему как новый пользователь .
  8. Сбросить пароль исходного пользователя.
  9. Войдите как оригинальный пользователь.

Дополнительная уборка:

  1. Удалить нового пользователя.
  2. Удалить временную <permission>строку в config.xml.

Во время этого ответа ценные бумаги не пострадали.


Добавьте в набор для очистки disableSignup обратно в true и перезапустите jenkins
— Marc

14

Чтобы отключить защиту 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, вы можете снова включить защиту на странице настройки глобальной безопасности , выбрав Область управления доступом / безопасностью . После этого не забудьте создать пользователя с правами администратора .


У меня это сработало, но сейчас пропускает авторизацию.
— hemanto

@hemanto Вам нужно включить безопасность, чтобы снова включить авторизацию. Я обновил ответ.
— Кенорб

12

На случай, если вы случайно заблокируете себя из Jenkins из-за ошибки разрешения, и у вас нет доступа на стороне сервера, чтобы переключиться на пользователя jenkins или root ... Вы можете сделать работу в Jenkins и добавить это в сценарий оболочки:

sed -i 's/<useSecurity>true/<useSecurity>false/' ~/config.xml

Затем нажмите Build Now и перезапустите Jenkins (или сервер, если вам нужно!)


1
Как ты создаешь работу в Дженкинс, если ты сам ее заблокировал?
— GeroldBroser восстанавливает Монику

В этом случае у меня было зарегистрировано обычное окно Chrome, и я изменил настройки безопасности и проверил в окне Incognito перед выходом из главного окна. Тест не позволил мне войти в систему, но мои сеансы продолжались в главном окне, чтобы я мог исправить повреждение.
— Ник

1
Я полагаю, что часть настроек безопасности, которые я изменил, также означала, что мой сеанс аутентификации больше не имел разрешения изменять конфигурации безопасности Jenkins.
— Ник

Запустите эту проблему после активации ProjectMatrixAuthorization. Когда я делаю изменения и перезапускаю Jenkins, я вижу исключение Java в Jenkins-UI. Чтобы исправить это, я удалил также строку с, authorizationStrategyи снова все было в порядке. Дженкинс прочитал это при следующем запуске как пустой тег.
— Питер Шнайдер

12

Мы можем сбросить пароль, оставив защиту включенной.

Файл 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

Теперь вы можете войти в систему, и вы не оставили свою систему открытой ни на секунду.


5
\.jenkins\secrets\initialAdminPassword

Скопируйте пароль из исходного файла AdminPassword и вставьте его в Jenkins.


4

Чтобы удалить безопасность по умолчанию для jenkins в ОС Windows,

Вы можете пройти через файл Config.xml, созданный внутри /users/ enjUserName broadcast/.jenkins.

Внутри этого файла вы можете изменить код

<useSecurity>true</useSecurity>

Чтобы,

<useSecurity>false</useSecurity>

4

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 использует


4

Шаг 1: перейдите в каталог cd .jenkins / secrets, после чего вы получите «initialAdminPassword».

Шаг 2: нано инициал AdminPassword

вы получите пароль


2

изменяя <useSecurity>true</useSecurity>для <useSecurity>false</useSecurity>не будет достаточно, вы должны удалить <authorizationStrategy>и <securityRealm>элементы тоже и перезапустить сервер Дженкинс делая sudo service jenkins restart.

помните это, установите <usesecurity>для falseтолько может вызвать проблемы для вас, так как эти инструкции упоминаются в тир официальной документации здесь .


1

Простой выход из этого - использовать admin psw для входа в систему с правами администратора:

  • Изменить на пользователя root: sudo su -
  • Скопируйте пароль: xclip -sel clip < /var/lib/jenkins/secrets/initialAdminPassword
  • Войдите в систему с помощью администратора и нажмите ctrl + vна поле ввода пароля.

Установите xclip, если у вас его нет:

  • $ sudo apt-get install xclip

Использование пароля по умолчанию работал для меня. Чтобы было проще, вы можете просто сделать 'cat secrets / initialAdminPassword' вместо установки xclip для одноразового использования.
— Пол

Иногда этого пароля нет. Я не уверен, как вы можете обойти этот конфиг, но для меня, это не присутствует, и мне пришлось редактировать config.xml
— vinicius.hisao

1

Дженкинс над КУБЕНЕТЕСОМ и Докером

В случае Дженкинс над контейнером , управляемым 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для доступа к контейнеру с привилегиями Root
  • apt-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
[...]

1

Часто у вас не будет прав на редактирование файла config.xml.

Простейшей вещью будет config.xmlвозврат и удаление с помощью команды sudo.

Перезапустите Дженкинс, используя команду sudo /etc/init.d/jenkins restart

Это отключит всю безопасность в Jenkins, и опция входа исчезнет


Если вы можете удалить config.xml с помощью sudo, вы можете отредактировать его и с помощью sudo. например, sudo vi ...
— Ли

1

Используя 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противном случае любая другая команда, вращающаяся вокруг Дженкинса, потерпит неудачу.


1

Чтобы очень просто отключить безопасность и мастер запуска, используйте свойство 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 не существует до запуска сервера.


0

У меня была похожая проблема, и после ответа от ArtB,

Я обнаружил, что у моего пользователя не было правильной конфигурации. так что я сделал:

Примечание: изменение таких XML-файлов вручную опасно. Делайте это на свой страх и риск. Так как я был уже взаперти, мне было нечего терять. AFAIK В худшем случае я бы удалил файл ~ / .jenkins / config.xml, как упоминалось в предыдущем посте.

**> 1. ssh к машине Дженкинса

  1. cd ~ / .jenkins (я полагаю, что некоторые установки помещают его в /var/lib/jenkins/config.xml, но не в моем случае)
  2. vi config.xml и под тегом authorizationStrategy xml добавьте следующий раздел (просто использовал мое имя пользователя вместо «put-your-username»)
  3. перезапустите Дженкинс. в моём случае как root служба tomcat7 остановится; ; сервис tomcat7 старт
  4. Попробуйте войти снова. (работал для меня) **

под

Добавить:

<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>

0

Отредактируйте файл $ JENKINS_HOME / config.xml и измените конфигурацию безопасности следующим образом:

<authorizationStrategy class="hudson.security.AuthorizationStrategy$Unsecured"/>

После этого перезапустите Дженкинс.


0

Для тех, кто использует macOS, новую версию просто можно установить с помощью homebrew. поэтому для отдыха эта командная строка должна использовать:

brew services restart jenkins-lts
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.