
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 jenkins
Benutzer im Jenkins-Server eine Verbindung zur Remote-IP herzustellen.
Immer wenn ich einen Befehl in der Pipeline ausführen möchte, scp
gibt die Konsole einen Fehler zurück. Aber wenn es sich nur um einen normalen SSH-Befehl handelt, wird cat atext.txt
das 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/.ssh
ist 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 jenkins
dem 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@remoteip
kann 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 root
und 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 scp
sollte Ihr Befehl funktionieren.