Дженкинс: Как изменить пароль LDAP

Мое учреждение требует, чтобы я периодически менял свой пароль LDAP.

В прошлом мне удалось выполнить следующие шаги, чтобы изменить мой пароль: -

  • Создайте пароль с кодировкой Base64 в http://www.base64encode.org/
  • Измените /var/lib/jenkins/config.xml и измените <managerPassword/>.

Однако в недавней версии Jenkins больше не используется <managerPassword/>. Вместо этого я вижу <managerPasswordSecret/>.

Я не уверен, как сгенерировать новый секретный пароль, поэтому я сделал следующее: -

  • Сначала резервное копирование /var/lib/jenkins/config.xml.
  • Измените /var/lib/jenkins/config.xml и измените <useSecurity/> на false.
  • Перезапустите службу Jenkins.
  • Пойдите к Дженкинсу.
  • Включить защиту LDAP.
  • Введите новый пароль LDAP.
  • Сохраните его.
  • Откройте /var/lib/jenkins/config.xml и скопируйте <managerPasswordSecret/>.
  • Восстановить резервный файл конфигурации.
  • Замените <managerPasswordSecret/> на новое значение.

Это невероятно запутанно.

Есть ли более простой способ сохранить мое изменение пароля LDAP в будущем?

Спасибо большое!

Ответ 1

Вы все еще можете использовать <managerPassword> .

  • Создайте новый закодированный пароль с помощью

    perl -e 'использовать MIME:: Base64; print encode_base64 ( "yourNewPassword" );

  • В вашем файле config.xml найдите <hudson> /<securityRealm> /<managerPasswordSecret> . Изменить <managerPasswordSecret> to <managerPassword> (как до, так и после) и помещать кодировку из # 1 между ними. Сохраните файл.

  • Перезапустить jenkins
  • Войдите в систему и используйте пользовательский интерфейс, reset пароль LDAP Manager для того же самого вашего нового пароля. config.xml теперь должен вернуться к <managerPasswordSecret> .
  • Если вы параноидально (как и я), снова перезапустите jenkins, чтобы использовать недавно измененный файл config.xml.

Ответ 2

Я пытался сделать то же самое, и это простое решение (используйте консоль Jenkins):

import com.trilead.ssh2.crypto.Base64;
import javax.crypto.Cipher;
import jenkins.security.CryptoConfidentialKey;
import hudson.util.Secret;

CryptoConfidentialKey KEY = new CryptoConfidentialKey(Secret.class.getName());
Cipher cipher = KEY.encrypt();
String MAGIC = "::::MAGIC::::";


String VALUE_TO_ENCRYPT = "";
println(new String(Base64.encode(cipher.doFinal((VALUE_TO_ENCRYPT + MAGIC).getBytes("UTF-8")))));

Декодирование проще:

println(hudson.util.Secret.decrypt(HashFromConfigXmlHere));

Я не Jenkins/Java master, поэтому используйте на свой страх и риск.

Ответ 3

Ни один из вышеперечисленных решений не работал у меня с более новой версией Дженкинса (2.78). То, что работало, заключалось в том, что managerPasswordSecret не шифровал. Как только я побежал Дженкинс, пароль был зашифрован для меня.

Ответ 4

Я попробовал решение, предоставленное @alkuzad, и его работоспособность. Просто поясните, что вы не можете использовать веб-консоль Jenkins при истечении срока действия пароля пользователя LDAP. Итак, я сделал следующее: у меня есть плагин groovy script в Jenkins. Я также предоставил доступ к анонимному пользователю script - не очень хорошая идея, но это то, как я изначально нашел, чтобы решить эту повторяющуюся проблему).

  • Скачан jenkins-cli.jar
  • введите выше код в GroovyPasswordClass.txt(чтобы не забывать использовать новый пароль вместо VALUE_TO_ENCRYPT в коде)
  • запустите jenkins server (его требование запустить jenkins)
  • выполните команду из командной строки

java -jar jenkins-cli.jar -s groovy GroovyPasswordClass.txt

Это приведет к печати зашифрованного пароля.

Лучший вариант

Хорошо, позже я нашел лучший способ сделать аутентификацию, если поставщик службы каталогов - это MS Active Directory. В этом случае вместо плагина LDAP я использовал плагин Active Directory для аутентификации. Это я нашел лучше, потому что

1) Ответ быстрее, если использовать плагин Active Directory вместо общего плагина на основе протокола LDAP 2) Плагин Active Directory использует пользовательские данные, с которыми была запущена служба Jenkins, и нет необходимости настраивать учетную запись пользователя в Jenkins. Таким образом, у вас никогда не будет ситуации, когда ваш вход Jenkins не работает, потому что пользователь, настроенный для ldap, имеет истекший пароль.

Надеюсь, это поможет другим, кто пытается решить эту проблему.

Ответ 5

Отредактируйте файл config.xml вручную.

Если ваш Jenkins использует набор тегов <managerPasswordSecret>, поместите туда новый пароль в виде простого текста, и Jenkins прочитает его. После запуска Jenkins перейдите на страницу "Настройка системы"> "Настройка глобальной безопасности" и нажмите "Сохранить". Это обновит это поле с зашифрованной версией.

Ответ 6

Текущее самое простое и быстрое решение (только что сработавшее для меня) - от Cloudbees: просто введите новый пароль в поле пароля в файле config.xml в виде простого текста (не зашифрованного), тогда Дженкинс прочтет это правильно. После запуска Jenkins и повторного сохранения страницы "Управление Jenkins" → "Настроить глобальную безопасность".

https://support.cloudbees.com/hc/en-us/articles/221230028-Changing-LDAP-Password