Jenkins 파이프라인: scp가 다른 원격으로 복사하려고 시도 중이며 호스트 키 확인에 실패했습니다.

Jenkins 파이프라인: scp가 다른 원격으로 복사하려고 시도 중이며 호스트 키 확인에 실패했습니다.

우분투 서버에서 Jenkins를 사용하고 있습니다. 이 경우 파일을 다른 원격 서버로 복사하고 싶습니다. Jenkins 파이프라인의 sshagent에서 SCP 명령을 사용하고 있습니다.

나는 다음 해결책을 시도했습니다.Jenkins에서 scp할 수 없습니다., 사용자가 생성되었습니다: jenkins, 공개 키는 ubuntu@remoteip allowed_host에 저장되고 SSH 개인 키는 ID가 있는 Jenkins 자격 증명에 저장됩니다 jenkins-ssh-to-ubuntu.

또한 jenkins 서버의 사용자를 사용하여 ssh에서 직접 원격 IP에 연결을 시도했는데 jenkins원격 IP에 연결하는 데 성공했습니다.

파이프라인에서 명령을 실행 하려고 할 때마다 scp콘솔에서 오류를 반환합니다. 그러나 일반적인 ssh 명령인 경우에는 cat atext.txt결과가 인쇄됩니다. 파이프라인의 콘솔 로그입니다.

[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

이것이 나의 파이프라인이다

    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:."
        }
    }

이 문제를 어떻게 해결할 수 있나요?

고쳐 쓰다: scp를 사용할 때 호스트 키 확인이 실패합니다.문제는 나와 동일하지만 동일한 콘솔 로그가 없고 REMOTE HOST IDENTIFICATION HAS CHANGED!경고 도 없습니다.

Jenkins 시스템의 권한이 stat ~jenkins/.ssh0700인지 확인했습니다.

  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: -

또한 예제를 업데이트했습니다. 일부 명령은 작동하지만 일부 명령은 작동하지 않는 것 같습니다.

고쳐 쓰다:jenkins사용자를 사용하여 수동으로 SSH를 실행하십시오.

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) 

환영 메시지가 표시된 후 Remoteip 시스템에 우분투로 로그인했습니다.

이것이 결과이다ls -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

내용은 이렇습니다/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

답변1

아래와 같이 수동 명령 ssh ubuntu@remoteip으로 호스트 ID를 저장하지 못했습니다.

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

파일은 root사용자 소유이고 쓸 수 없기 때문에jenkins

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

먼저 다음으로 실행root

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

그런 다음 다음과 같이 실행하십시오.jenkins

ssh ubuntu@remoteip

처음에는 호스트 ID를 저장해야 하고 다음에는 다시 묻지 않아야 합니다. 그 후에는 scp명령이 작동합니다.

관련 정보