Как сбросить настройки безопасности 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.