Jenkins-Pipeline: scp versucht, auf andere Remote-Remote zu kopieren, Host-Schlüsselüberprüfung fehlgeschlagen

Jenkins-Pipeline: scp versucht, auf andere Remote-Remote zu kopieren, Host-Schlüsselüberprüfung fehlgeschlagen

Ich verwende Jenkins auf einem Ubuntu-Server. In diesem Fall möchte ich eine Datei auf einen anderen Remote-Server kopieren. Ich verwende den SCP-Befehl innerhalb der Jenkins-Pipeline sshagent.

Ich habe die Lösung von ausprobiertscp in Jenkins nicht möglich, bereits erstellter Benutzer: Jenkins, speichern Sie den öffentlichen Schlüssel im ubuntu@remoteip allowed_host, und sein privater SSH-Schlüssel wird in den Jenkins-Anmeldeinformationen mit der ID gespeichert jenkins-ssh-to-ubuntu.

Ich habe auch versucht, per SSH direkt vom Jenkins-Server zur Remote-IP mit dem jenkinsBenutzer im Jenkins-Server eine Verbindung zur Remote-IP herzustellen.

Immer wenn ich einen Befehl in der Pipeline ausführen möchte, scpgibt die Konsole einen Fehler zurück. Aber wenn es sich nur um einen normalen SSH-Befehl handelt, wird cat atext.txtdas Ergebnis ausgedruckt. Hier ist das Konsolenprotokoll der 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

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

Wie kann ich das Problem beheben?

Aktualisieren: Bei Verwendung von SCP ist die Hostschlüsselüberprüfung fehlgeschlagenFrage ist die gleiche wie meine, aber ich hatte nicht das gleiche Konsolenprotokoll gab es keine REMOTE HOST IDENTIFICATION HAS CHANGED!Warnung

Beim Überprüfen der Berechtigung in der Jenkins-Maschine stat ~jenkins/.sshist es 07:00

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

Ich habe das Beispiel auch aktualisiert. Ich glaube, es gibt einen Befehl, der funktioniert, und einen, der nicht funktioniert.

Aktualisieren:SSH manuell mit jenkinsdem Benutzer ausführen

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) 

nach dieser Willkommensnachricht habe ich mich als Ubuntu auf der RemoteIP-Maschine angemeldet

Dies ist das Ergebnis vonls -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

und das ist der Inhalt von/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

Antwort1

Ihr manueller Befehl ssh ubuntu@remoteipkann die Host-Identifikation nicht speichern, wie mit angezeigt

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

weil diese Datei dem Benutzer gehört rootund für diesen nicht beschreibbar istjenkins

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

Erster Lauf alsroot

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

dann ausführen alsjenkins

ssh ubuntu@remoteip

Beim ersten Mal sollte die Host-ID gespeichert werden und beim nächsten Mal sollte nicht erneut danach gefragt werden. Danach scpsollte Ihr Befehl funktionieren.

verwandte Informationen