A verificação da chave do host Jenkins falhou

164

Estou com um problema com o jenkins , definindo "git", mostra o seguinte erro:

Failed to connect to repository : Command "git ls-remote -h https://[email protected]/person/projectmarket.git HEAD" returned status code 128:
stdout:
stderr: fatal: Authentication failed

Eu testei com ssh :

[email protected]:person/projectmarket.git

Este é um erro:

Failed to connect to repository : Command "git ls-remote -h [email protected]:person/projectmarket.git HEAD" returned status code 128:
stdout:
stderr: Host key verification failed.
fatal: The remote end hung up unexpectedly

Eu também fiz estas etapas com a "chave SSH".

Entrar em Jenkins

sudo su jenkins

Copie sua chave do github para a pasta .ssh do Jenkins

cp ~/.ssh/id_rsa_github* /var/lib/jenkins/.ssh/

Renomeie as chaves

mv id_rsa_github id_rsa
mv id_rsa_github.pub id_rsa.pub

mas ainda não está funcionando no repositório git em jenkins .

obrigado pela ajuda !.

AM Mérida
fonte
nenhum usuário de jenkins existente
IceFire

Respostas:

183

Mude para o jenkinsusuário e execute o comando manualmente:

git ls-remote -h [email protected]:person/projectmarket.git HEAD

Você receberá o aviso SSH padrão ao se conectar pela primeira vez a um novo host via SSH:

The authenticity of host 'bitbucket.org (207.223.240.181)' can't be established.
RSA key fingerprint is 97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40.
Are you sure you want to continue connecting (yes/no)?

Digite yese pressione Enter. A chave do host bitbucket.orgagora será adicionada ao ~/.ssh/known_hostsarquivo e você não receberá mais esse erro no Jenkins.

ctc
fonte
6
mostre isto: Permissão negada (chave pública). fatal: O lado remoto desligou inesperadamente
AM Mérida
6
Certo, mas esse é um erro totalmente diferente. Agora você deve adicionar sua chave pública ao repositório em bitbucket.org.
CTC
2
+1 para "worksforme" teve exatamente o mesmo problema. Criou id_rsa para o usuário adequado, chmod-ed para jenkins, adicionou a chave pública, ainda não funcionou. Tentar o git como sudo -u jenkins produziu o arquivo knonwn_hosts, corrigindo o problema.
sibidiba
3
Você precisa executá-lo como o usuário que está executando o Jenkins. Na maioria dos sistemas, normalmente é executado como um usuário separado (por exemplo, um usuário 'jenkins'). Portanto, você precisaria mudar para esse usuário para garantir que o endereço do bitbucket.org seja adicionado ao ~ / .ssh / known_hosts.
ctc
43

Jenkins é uma conta de serviço, não possui um shell por design. É geralmente aceito que contas de serviço. não deve conseguir fazer logon interativamente.

Para resolver "A verificação da chave do Jenkins Host falhou", execute as seguintes etapas. Eu tenho usado mercurial com Jenkins.

1) Execute os seguintes comandos no terminal

             $ sudo su -s /bin/bash jenkins

fornecer senha

2) Gere chave privada pública usando o seguinte comando:

              ssh-keygen

você pode ver a saída como:

Generating public/private rsa key pair. 
Enter file in which to save the key (/var/lib/jenkins/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 

3) Pressione Enter -> Não digite a senha -> pressione enter

             Key has been generated

4) vá para -> cat /var/lib/jenkins/.ssh/id_rsa.pub

5) Copie a chave do id_rsa.pub

6) Sair do bash

7) ssh@yourrepository

8) vi .ssh/authorized_keys

9) Cole a chave

10) sair

11) Faça o login manualmente no servidor mercurial

Nota: Os pls fazem login manualmente, caso contrário, o jenkins retornará o erro "falha na verificação do host"

12) uma vez feito manualmente, agora vá para Jenkins e dê build

Aproveitar!!!

Boa sorte

Feroz Ahmed Ansari
fonte
QUE senha é solicitada aqui?
IceFire
26

Ou você pode usar:

ssh -oStrictHostKeyChecking=no host

Isso será inseguro (ataques do tipo intermediário), mas a solução mais fácil.

A melhor maneira de fazer isso é gerar mapeamentos corretos entre o host e o endereço IP, para sshnão reclamar:

#!/bin/bash

for domain in "github.com" "bitbucket.org"; do
    sed -i "/$domain/d" ~/.ssh/known_hosts
    line=$(ssh-keyscan $domain,`nslookup $domain | awk '/^Address: / { print $2 ; exit }'`)
    echo $line >> ~/.ssh/known_hosts
done

Trecho da essência .

FelikZ
fonte
3
Isso abre você para possíveis ataques MITM.
Ctc
1
Você pode adicionar -oStrictHostKeyChecking = no e conectar-se uma vez, o que adicionará o host ao arquivo known_hosts (o mesmo que quando você ssh na linha de comando e digitar yes para adicionar a chave ao arquivo known_hosts) e depois remover essa opção.
krupan
6

Teve o mesmo problema, eu corrijo assim:

redefinir a permissão em id_rsa * apenas para o usuário atual nenhum grupo nenhum outro

chmod o-rwx ~/.ssh/id*
chmod G-rwx ~/.ssh/id*

ls -lart ~/.ssh/


-rw-------  1 jenkins nogroup  398 avril  3 09:34 id_rsa.pub
-rw-------  1 jenkins nogroup 1675 avril  3 09:34 id_rsa

E limpe ~ / .ssh / know_hosts

Agora Conecte-se como Jenkins

sudo su jenkins

Experimente os comandos jenkins

git ls-remote -h [email protected]:user/project.git HEAD

Se nenhum problema aparecer, agora o jenkins poderá conectar o repositório (pelo menos para mim ^^)

Loodub
fonte
1
O comando acima (chmod G-rwx ~ / .ssh / id *) para alterar a permissão do grupo falhou. O abaixo funcionou como desejado. chmod g-rwx ~ / .ssh / id *
samaitra
3
  • Verifique se não estamos editando nenhuma das propriedades padrão do sshd_config para ignorar o erro

  • Falha na verificação do host - Definitivamente uma entrada ausente do nome do host no known_hostsarquivo

  • Efetue login no servidor em que o processo está falhando e faça o seguinte:

    1. Sudo para o usuário executando o processo

    2. ssh-copy-id destinationuser@destinationhostname

    3. Ele solicitará assim pela primeira vez, diga sim e também solicitará a senha pela primeira vez:

      The authenticity of host 'sample.org (205.214.640.91)' can't be established.
      RSA key fingerprint is 97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40.
      Are you sure you want to continue connecting (yes/no)? *yes*
      

      Solicitar senha? dar senha

    4. Agora, no servidor em que o processo está sendo executado, faça ssh destinationuser@destinationhostname . Ele deve fazer login sem uma senha.

      Nota: Não altere as permissões padrão dos arquivos no diretório .ssh do usuário , você terá problemas diferentes

GANESH
fonte
na etapa 3, pode ser que você já tenha solicitado a chave no arquivo, mas você deve continuar com essas 4 etapas e, se conseguir fazer login sem a senha do usuário jenkins, está tudo pronto.
Rakibul Haq
3

Quanto à solução alternativa (por exemplo, escravo do Windows), defina a seguinte variável de ambiente nas propriedades globais:

GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no"

Jenkins, Propriedades globais, Variáveis ​​de ambiente, GIT_SSH_COMMAND

Nota: Se você não encontrar a opção, provavelmente precisará do plug- in EnvInject .

kenorb
fonte
3

Copie as chaves do host do bitbucket e do github:

ssh root@deployserver 'echo "$(ssh-keyscan -t rsa,dsa bitbucket.org)" >> /root/.ssh/known_hosts'
ssh root@deployserver 'echo "$(ssh-keyscan -t rsa,dsa github.com)" >> /root/.ssh/known_hosts'
Marco M
fonte
2

Da melhor maneira, você pode simplesmente usar o seu "git url" no formato de URL 'https' no arquivo Jenkins ou onde quiser.

git url: 'https://github.com/jglick/simple-maven-project-with-tests.git'

Nitin
fonte
2

SSH

Se você estiver tentando com o SSH, o erro de verificação da chave do host pode ocorrer devido a vários motivos. Siga estas etapas para superar todos os motivos.

  1. Defina a variável de ambiente como HOME e forneça o endereço como o diretório raiz da pasta .ssh . por exemplo: - Se o seu .ssh for mantido dentro do Nome pasta . C: / Usuários / Nome.
  2. Agora, verifique se a chave SSH pública também está sendo fornecida no link do repositório. Ou é github ou bitbucket ou qualquer outro.
  3. Abra o git bash. E tente clonar o projeto no repositório. Isso ajudará a adicionar a URL do repositório no arquivo known_host, que está sendo criado automaticamente na pasta .ssh.
  4. Agora abra o jenkins e crie um novo trabalho. Depois clique em configurar.
  5. forneça o URL de clonagem no gerenciamento de código-fonte no Git. O URL deve começar com [email protected] / ......... ou ssh: // proje ........
  6. Sob a Credencial, você precisa adicionar o nome de usuário e a senha do formulário do seu repositório ao qual está clonando o projeto. Selecione essa credencial.
  7. E agora aplique e salve a configuração.
  8. Bingo! Comece a construir o projeto. Espero que agora você não obtenha nenhum erro de verificação da Chave do host!
Prem Choudhary
fonte
2
  1. entre como jenkins usando: "sudo su -s / bin / bash jenkins"
  2. git clona o repositório desejado que causa o erro da chave
  3. solicitará que você adicione a chave, mostrando Sim / Não (digite sim ou y)

é isso aí!

agora você pode executar novamente o trabalho de jenkins.

Espero que isso resolva seu problema.

Timothy Asir
fonte
2

Eu corri para esse problema e o problema era que o serviço jenkins não estava sendo executado como usuário do jenkins. Portanto, executar os comandos como o usuário jenkins funcionou bem.

Jeff Hutchins
fonte
1

Experimentar

ssh-keygen -R nome do host

-R hostname Remove todas as chaves pertencentes ao hostname de um arquivo known_hosts. Esta opção é útil para excluir hosts com hash

Aswathy Unni
fonte