Pipeline Jenkins: scp tenta copiar para outro controle remoto, falha na verificação da chave do host

Pipeline Jenkins: scp tenta copiar para outro controle remoto, falha na verificação da chave do host

Eu uso Jenkins no servidor Ubuntu. Neste caso, quero copiar um arquivo para outro servidor remoto. Eu uso o comando SCP dentro do sshagent do pipeline Jenkins.

Eu tentei a solução deincapaz de scp em jenkins, usuário já criado: jenkins, salve a chave pública em ubuntu@remoteip enabled_host, e sua chave privada ssh é salva nas credenciais do Jenkins com o ID jenkins-ssh-to-ubuntu.

Também tentei do ssh diretamente do servidor jenkins para o ip remoto com o jenkinsusuário no servidor jenkins, ele pode se conectar ao ip remoto.

Sempre que quero executar scpum comando no pipeline, o console retorna um erro. Mas quando é apenas o comando ssh normal, cat atext.txtele imprime o resultado. Aqui está o log do console do pipeline

[Pipeline] sh
ssh -o StrictHostKeyChecking=no ubuntu@remoteip cat atext.txt
Failed to add the host to the list of known hosts (/var/lib/jenkins/.ssh/known_hosts).
{
  example: "it prints out the long text to the jenkins console output"
}
[Pipeline] sh
+ scp -r docker-compose-prod.yml ubuntu@remoteip:.
Host key verification failed.
lost connection

aqui está meu pipeline

    stage('Copy requiredfile to deployment'){
        sshagent(['jenkins-ssh-to-ubuntu']){
            sh "ssh -o StrictHostKeyChecking=no ubuntu@remoteip atext.txt"
            sh "scp -r docker-compose-prod.yml ubuntu@remoteip:."
        }
    }

Como posso resolver isto?

Atualizar: a verificação da chave do host falhou quando eu uso o scpa pergunta é igual à minha, mas eu não tinha o mesmo log do console, não houve REMOTE HOST IDENTIFICATION HAS CHANGED!aviso

Verificando a permissão na máquina Jenkins stat ~jenkins/.sshé 0700

  File: /var/lib/jenkins/.ssh/
  Size: 4096            Blocks: 8          IO Block: 4096   directory
Device: fc01h/64513d    Inode: 265912      Links: 2
Access: (0700/drwx------)  Uid: (  111/ jenkins)   Gid: (  115/ jenkins)
Access: 2019-01-18 03:22:46.519541657 +0000
Modify: 2019-01-18 03:07:42.447547320 +0000
Change: 2019-01-18 03:07:42.447547320 +0000
 Birth: -

Atualizei o exemplo também, acho que tem algum comando que funciona e não funciona.

Atualizar:Executando o ssh manualmente usando jenkinso usuário

jenkins@ubuntu:/home/ubuntu$ ssh ubuntu@remoteip
The authenticity of host 'remoteip (remoteip)' can't be established.
ECDSA key fingerprint is SHA256:fingerprint.
Are you sure you want to continue connecting (yes/no)? yes
Failed to add the host to the list of known hosts (/var/lib/jenkins/.ssh/known_hosts).
Enter passphrase for key '/var/lib/jenkins/.ssh/id_rsa':
Welcome to Ubuntu 16.04.5 LTS (GNU/Linux 4.4.0-141-generic x86_64) 

depois daquela mensagem de boas-vindas, loguei como ubuntu na máquina remoteip

este é o resultado dels -la /var/lib/jenkins/.ssh

jenkins@ubuntu-s-1vcpu-1gb-sgp1-01:/home/ubuntu$ ls -la /var/lib/jenkins/.ssh
total 24
drwx------  2 jenkins jenkins 4096 Jan 18 03:07 .
drwxr-xr-x 22 jenkins jenkins 4096 Jan 18 10:06 ..
-rw-------  1 jenkins jenkins 1766 Jan 18 03:07 id_rsa
-rw-r--r--  1 jenkins jenkins  416 Jan 18 03:07 id_rsa.pub
-rw-------  1 root    root     666 Jan  7 09:40 known_hosts
-rw-r--r--  1 jenkins jenkins  888 Dec 27 01:47 known_hosts.old

e este é o conteúdo de/etc/ssh/ssh_config

# This is the ssh client system-wide configuration file.  See
# ssh_config(5) for more information.  This file provides defaults for
# users, and the values can be changed in per-user configuration files
# or on the command line.

# Configuration data is parsed as follows:
#  1. command line options
#  2. user-specific file
#  3. system-wide file
# Any configuration value is only changed the first time it is set.
# Thus, host-specific definitions should be at the beginning of the
# configuration file, and defaults at the end.

# Site-wide defaults for some commonly used options.  For a comprehensive
# list of available options, their meanings and defaults, please see the
# ssh_config(5) man page.

Host *
#   ForwardAgent no
#   ForwardX11 no
#   ForwardX11Trusted yes
#   PasswordAuthentication yes
#   HostbasedAuthentication no
#   GSSAPIAuthentication no
#   GSSAPIDelegateCredentials no
#   GSSAPIKeyExchange no
#   GSSAPITrustDNS no
#   BatchMode no
#   CheckHostIP yes
#   AddressFamily any
#   ConnectTimeout 0
#   StrictHostKeyChecking ask
#   IdentityFile ~/.ssh/id_rsa
#   IdentityFile ~/.ssh/id_dsa
#   IdentityFile ~/.ssh/id_ecdsa
#   IdentityFile ~/.ssh/id_ed25519
#   Port 22
#   Protocol 2
#   Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc
#   MACs hmac-md5,hmac-sha1,[email protected]
#   EscapeChar ~
#   Tunnel no
#   TunnelDevice any:any
#   PermitLocalCommand no
#   VisualHostKey no
#   ProxyCommand ssh -q -W %h:%p gateway.example.com
#   RekeyLimit 1G 1h
    SendEnv LANG LC_*
    HashKnownHosts yes
    GSSAPIAuthentication yes

Responder1

Seu comando manual ssh ubuntu@remoteipnão pode salvar a identificação do host conforme mostrado em

Failed to add the host to the list of known hosts (/var/lib/jenkins/.ssh/known_hosts).

porque este arquivo pertence roote não pode ser gravado pelo usuáriojenkins

-rw-------  1 root    root     666 Jan  7 09:40 known_hosts

Primeiro execute comoroot

chown jenkins.jenkins /var/lib/jenkins/.ssh/known_hosts

então corra comojenkins

ssh ubuntu@remoteip

Na primeira vez ele deverá salvar a identificação do host e na próxima vez não deverá perguntar novamente. Depois disso, seu scpcomando deve funcionar.

informação relacionada