Respostas:
A solução mais simples é desabilitar completamente de segurança - a mudança true
para false
no /var/lib/jenkins/config.xml
arquivo.
<useSecurity>true</useSecurity>
Depois, basta reiniciar o Jenkins,
sudo service jenkins restart
E depois vá ao painel de administração e defina tudo mais uma vez.
Se você estiver executando seu Jenkins dentro do pod k8s a partir de uma janela de encaixe, que é o meu caso e não pode executar o service
comando, basta reiniciar o Jenkins excluindo o pod:
kubectl delete pod <jenkins-pod-name>
Depois que o comando foi emitido, o k8s encerrará o pod antigo e iniciará um novo.
sudo service jenkins restart
find / -name "config.xml"
no seu terminal.
Uma outra maneira seria editar manualmente o arquivo de configuração para seu usuário (por exemplo, /var/lib/jenkins/users/username/config.xml) e atualizar o conteúdo de passwordHash :
<passwordHash>#jbcrypt:$2a$10$razd3L1aXndFfBNHO95aj.IVrFydsxkcQCcLmujmFQzll3hcUrY7S</passwordHash>
Depois de fazer isso, basta reiniciar o Jenkins e fazer login usando esta senha:
test
<passwordHash>
tag xml é filha de <hudson.security.HudsonPrivateSecurityRealm_-Details>
. Veja o usuário administrador padrão para ter uma idéia da estrutura XML total.
Encontrei o arquivo em questão localizado em / var / lib / jenkins chamado config.xml, modificando o problema.
/Applications/jenkins-2.19.3-0/apps/jenkins/jenkins_home/users/admin/config.xml
O <passwordHash>
elemento in users/<username>/config.xml
aceitará dados do formato
salt:sha256("password{salt}")
Portanto, se seu salt é bar
e sua senha é foo
, você pode produzir o SHA256 assim:
echo -n 'foo{bar}' | sha256sum
Você deve obter 7f128793bc057556756f4195fb72cdc5bd8c5a74dee655a6bfb59b4a4c4f4349
como resultado. Pegue o hash e coloque-o com sal em <passwordHash>
:
<passwordHash>bar:7f128793bc057556756f4195fb72cdc5bd8c5a74dee655a6bfb59b4a4c4f4349</passwordHash>
Reinicie o Jenkins e tente fazer login com a senha foo
. Redefina sua senha para outra coisa. (Jenkins usa bcrypt por padrão, e uma rodada de SHA256 não é uma maneira segura de armazenar senhas. Você obterá um hash de bcrypt armazenado quando redefinir sua senha.)
No El-Capitan, o config.xml não pode ser encontrado em
/ var / lib / jenkins /
Está disponível em
~ / .jenkins
depois disso, como mencionado anteriormente, abra o arquivo config.xml e faça as seguintes alterações
Substitua <useSecurity>true</useSecurity>
por<useSecurity>false</useSecurity>
Remova <authorizationStrategy>
e<securityRealm>
Salve-o e reinicie o jenkins ( serviço sudo jenkins restart )
A resposta sobre a modificação estava correta. No entanto, acho que deve ser mencionado que se /var/lib/jenkins/config.xml
parece com isso se você ativou a "Estratégia de autorização de matriz baseada em projeto". Excluir /var/lib/jenkins/config.xml
e reiniciar o jenkins também funciona. Também excluí os usuários /var/lib/jenkins/users
para começar do zero.
<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>
Para redefini-lo sem desativar a segurança se você estiver usando permissões de matriz (provavelmente facilmente adaptável a outros métodos de login):
config.xml
, defina disableSignup
como false
.config.xml
, duplique uma das <permission>hudson.model.Hudson.Administer:username</permission>
linhas e substitua username
pelo novo usuário.disableSignup
de volta para true
nos config.xml
.Limpeza opcional:
<permission>
linha temporária config.xml
.Nenhum título foi prejudicado durante esta resposta.
Para desativar a segurança do Jenkins em etapas simples no Linux, execute estes comandos:
sudo ex +g/useSecurity/d +g/authorizationStrategy/d -scwq /var/lib/jenkins/config.xml
sudo /etc/init.d/jenkins restart
Ele removerá useSecurity
e authorizationStrategy
alinhará o seu config.xml
arquivo de configuração raiz e reiniciará o seu Jenkins.
Veja também: Desativar segurança no site da Jenkins
Após obter o acesso ao Jenkins, você pode reativar a segurança na página Configurar Segurança Global , escolhendo o Controle de Acesso / Região de Segurança . Depois disso, não esqueça de criar o usuário administrador .
Por acaso, você acidentalmente se bloqueia no Jenkins devido a um erro de permissão e não tem acesso no servidor para mudar para o usuário ou raiz do jenkins ... Você pode fazer um trabalho no Jenkins e adicioná-lo ao Shell Script:
sed -i 's/<useSecurity>true/<useSecurity>false/' ~/config.xml
Em seguida, clique em Compilar agora e reinicie o Jenkins (ou o servidor, se necessário!)
ProjectMatrixAuthorization
. Quando faço a alteração e reinicio o Jenkins, vejo uma exceção Java na Jenkins-UI. Para corrigir isso, também removi a linha authorizationStrategy
e estava tudo bem novamente. Jenkins o leu no início seguinte como uma etiqueta vazia.
Podemos redefinir a senha enquanto mantemos a segurança ativada.
O arquivo config.xml em / var / lib / Jenkins / users / admin / age como o arquivo / etc / shadow de sistemas Linux ou UNIX ou o arquivo SAM no Windows, no sentido de armazenar o hash do arquivo senha da conta.
Se você precisar redefinir a senha sem fazer login, poderá editar este arquivo e substituir o hash antigo por um novo gerado a partir do bcrypt:
$ pip install bcrypt
$ python
>>> import bcrypt
>>> bcrypt.hashpw("yourpassword", bcrypt.gensalt(rounds=10, prefix=b"2a"))
'YOUR_HASH'
Isso produzirá seu hash, com o prefixo 2a, o prefixo correto para os hashes Jenkins.
Agora, edite o arquivo config.xml:
...
<passwordHash>#jbcrypt:REPLACE_THIS</passwordHash>
...
Depois de inserir o novo hash, redefina o Jenkins:
(se você estiver em um sistema com systemd):
sudo systemctl restart Jenkins
Agora você pode fazer login e não deixou o sistema aberto por um segundo.
1 verifique primeiro o local se você instalar war ou Linux ou Windows com base nesse
por exemplo, se a guerra no Linux e para o usuário administrador
/home/"User_NAME"/.jenkins/users/admin/config.xml
vá para esta tag após #jbcrypt:
<passwordHash>#jbcrypt:$2a$10$3DzCGLQr2oYXtcot4o0rB.wYi5kth6e45tcPpRFsuYqzLZfn1pcWK</passwordHash>
altere essa senha usando qualquer site para gerador de hash bcrypt
https://www.dailycred.com/article/bcrypt-calculator
certifique-se de começar com $ 2a, porque esse jenkens usa
Etapa 1: vá para o diretório cd .jenkins / secrets e você receberá um 'initialAdminPassword'.
Etapa 2: nano initialAdminPassword
você receberá uma senha
mudando o <useSecurity>true</useSecurity>
que <useSecurity>false</useSecurity>
não será suficiente, você deve remover <authorizationStrategy>
e <securityRealm>
elementos também e reinicie o servidor Jenkins fazendo sudo service jenkins restart
.
lembre-se disso, definido <usesecurity>
como false
somente pode causar um problema para você, pois essas instruções são mencionadas na documentação oficial aqui .
sudo su -
xclip -sel clip < /var/lib/jenkins/secrets/initialAdminPassword
ctrl + v
a caixa de entrada da senha.$ sudo apt-get install xclip
Jenkins sobre KUBENETES e Docker
Em caso de Jenkins sobre um recipiente gerido por uma Kubernetes POD é um pouco mais complexa, pois: kubectl exec PODID --namespace=jenkins -it -- /bin/bash
você permitirá o acesso diretamente para o recipiente rodando Jenkins, mas você não terá acesso root , sudo
, vi
e muitos comandos não estão disponíveis e, portanto, uma solução alternativa é preciso.
Use kubectl describe pod [...]
para encontrar o nó executando seu Pod e o ID do contêiner(docker://...)
SSH
no nódocker exec -ti -u root -- /bin/bash
para acessar o contêiner com privilégios de Raizapt-get update
sudo apt-get install vim
A segunda diferença é que o arquivo de configuração do Jenkins é colocado em um caminho diferente que corresponde ao ponto de montagem do volume persistente, ou seja /var/jenkins_home
, esse local pode mudar no futuro, verifique em execução df
.
Em seguida, desative a segurança - altere true para false no /var/jenkins_home/jenkins/config.xml
arquivo.
<useSecurity>false</useSecurity>
Agora basta reiniciar o Jenkins, ação que fará com que o contêiner e o Pod morram, ele será criado novamente em alguns segundos com a configuração atualizada (e toda a chance, como vi, atualização apagada), graças ao volume persistente.
Toda a solução foi testada no Google Kubernetes Engine.
ATUALIZAÇÃO
Observe que você também pode executar ps -aux
a senha em texto simples, mesmo sem acesso root.
jenkins@jenkins-87c47bbb8-g87nw:/$ps -aux
[...]
jenkins [..] -jar /usr/share/jenkins/jenkins.war --argumentsRealm.passwd.jenkins=password --argumentsRealm.roles.jenkins=admin
[...]
Muitas vezes você não terá permissão para editar o arquivo config.xml.
A coisa mais simples seria voltar atrás config.xml
e excluir usando o comando sudo.
Reinicie os jenkins usando o comando sudo /etc/init.d/jenkins restart
Isso desativará toda a segurança no Jenkins e a opção de login desaparecerá
Usando o bcrypt, você pode resolver esse problema. Estendendo a resposta @Reem para alguém que está tentando automatizar o processo usando o bash e o 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
Eu mantive a senha codificada aqui, mas pode ser uma entrada do usuário, dependendo do requisito. Certifique-se também de acrescentar que, sleep
caso contrário, qualquer outro comando que gere em torno do Jenkins falhará.
Para simplesmente desabilitar a segurança e o assistente de inicialização, use a propriedade JAVA:
-Djenkins.install.runSetupWizard=false
O bom disso é que você pode usá-lo em uma imagem do Docker, para que seu contêiner sempre seja iniciado imediatamente, sem a tela de login:
# Dockerfile
FROM jenkins/jenkins:lts
ENV JAVA_OPTS -Djenkins.install.runSetupWizard=false
Observe que, conforme mencionado por outros, o Jenkins config.xml está na /var/jenkins_home
imagem, mas o uso sed
para modificá-lo a partir do Dockerfile falha, porque (presumivelmente) o config.xml não existe até o servidor iniciar.
Eu tive um problema semelhante e, após a resposta do ArtB,
Descobri que meu usuário não tinha as configurações adequadas. então o que eu fiz:
Nota: modificar manualmente esses arquivos XML é arriscado. Faça por sua conta e risco. Como eu já estava trancada, não tinha muito a perder. AFAIK No pior caso, eu teria excluído o arquivo ~ / .jenkins / config.xml como mencionado anteriormente.
**> 1. ssh na máquina jenkins
- cd ~ / .jenkins (acho que algumas instalações o colocam em /var/lib/jenkins/config.xml, mas não no meu caso)
- vi config.xml e, sob a tag authorStrategy xml, adicione a seção abaixo (usei meu nome de usuário em vez de "put-your-username")
- reinicie o jenkins. no meu caso, como serviço raiz tomcat7 stop; ; serviço tomcat7 start
- Tente fazer login novamente. (trabalhou para mim) **
debaixo
adicionar:
<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>
Agora, você pode ir para direções diferentes. Por exemplo, eu tinha integração com o github oauth, então eu poderia ter tentado substituir a autorizaçãoStrategy por algo como abaixo:
Nota :, funcionou no meu caso porque eu tinha um plugin específico do github oauth que já estava configurado. Portanto, é mais arriscado que a solução anterior.
<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>
Edite o arquivo $ JENKINS_HOME / config.xml e altere a configuração de segurança com este:
<authorizationStrategy class="hudson.security.AuthorizationStrategy$Unsecured"/>
Depois disso, reinicie o Jenkins.
Para quem está usando o macOS, a nova versão apenas pode ser instalada pelo homebrew. portanto, para descansar, esta linha de comando deve estar usando:
brew services restart jenkins-lts