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

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

Ответ 1

Самое простое решение - полностью отключить защиту - измените true на false в файле /var/lib/jenkins/config.xml.

<useSecurity>true</useSecurity>

Затем просто перезапустите Дженкинс,

sudo service jenkins restart

А затем зайдите в админ-панель и настройте все заново.

Если вы в случае запускаете свой Jenkins в модуле k8s из докера, что в моем случае, и не можете запустить service команду, то вы можете просто перезапустить Jenkins, удалив модуль:

kubectl delete pod <jenkins-pod-name>

Как только команда будет введена, k8s прекратит работу старого модуля и начнет новый.

Ответ 2

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

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

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

test

Ответ 3

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

Ответ 4

Элемент <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. Затем reset ваш пароль к чему-то другому. (Дженкинс использует bcrypt по умолчанию, а один раунд SHA256 не является безопасным способом хранения паролей. Вы получите хэш-код bcrypt, сохраненный при reset вашем пароле.)

Ответ 5

В El-Capitan config.xml не может быть найден на

/вар/Library/Jenkins/

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

~/.jenkins

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

  • В этом случае замените <useSecurity>true</useSecurity> на <useSecurity>false</useSecurity>

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

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

Ответ 6

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

Ответ 7

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

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

Дополнительная очистка:

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

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

Ответ 8

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

Ответ 9

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

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

Затем нажмите "Создать сейчас" и перезапустите Jenkins (или сервер, если вам нужно!)

Ответ 10

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

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

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

Ответ 11

\.jenkins\secrets\initialAdminPassword

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

Ответ 12

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

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

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

<useSecurity>true</useSecurity>

Для

<useSecurity>false</useSecurity>

Ответ 13

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

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

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

Ответ 14

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

Ответ 15

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

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

Ответ 16

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

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

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

  • $ sudo apt-get install xclip

Ответ 17

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

В случае Jenkins над контейнером, управляемым POD из Kubernetes, это немного сложнее, поскольку: kubectl exec PODID --namespace=jenkins -it --/bin/bash позволит вам получить доступ напрямую к контейнеру, в котором работает Jenkins, но вы не будет иметь root-доступа, 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.

Затем отключите защиту - измените true на false в файле /var/jenkins_home/jenkins/config.xml.

<useSecurity>false</useSecurity>

Теперь достаточно перезапустить Jenkins, действие, которое приведет к смерти контейнера и модуля, оно будет создано снова через несколько секунд с обновленной конфигурацией (и все шансы, такие как vi, обновление стерты) благодаря постоянному тому.

Все решение было протестировано на Google Kubernetes Engine. ОБНОВЛЕНИЕ Обратите внимание, что вы также можете запустить ps -aux пароль в виде обычного текста отображается даже без доступа root.

[email protected]:/$ps -aux
[...]
jenkins [..] -jar /usr/share/jenkins/jenkins.war --argumentsRealm.passwd.jenkins=password --argumentsRealm.roles.jenkins=admin
[...]

Ответ 18

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

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

Перезапустите jenkins с помощью команды sudo/etc/init.d/jenkins restart

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

Ответ 19

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

Ответ 20

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

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

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

** > 1. ssh для машины дженкинсов

  • cd ~/.jenkins(я предполагаю, что некоторые установки помещают его под /var/lib/jenkins/config.xml, но не в моем случае)
  • vi config.xml, а под тегом authorizationStrategy xml добавьте раздел ниже (просто используйте мое имя пользователя вместо "put-your-username" )
  • перезапустить jenkins. в моем случае как root service tomcat7 stop;; сервис 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="[email protected]">
    <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>

Ответ 21

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

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

После этого перезапустите Jenkins.

Ответ 22

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