
我在 ubuntu 伺服器中使用 Jenkins。在本例中,我想將檔案複製到另一台遠端伺服器。我在 Jenkins 管道的 sshagent 中使用 SCP 指令。
我嘗試了以下解決方案無法在詹金斯中進行 scp,已經建立使用者:jenkins,將公鑰儲存到ubuntu@remoteip allowed_host,其ssh私鑰保存在Jenkins憑證中,ID為jenkins-ssh-to-ubuntu
。
我還嘗試使用jenkins伺服器中的用戶直接從ssh連接到遠端ip jenkins
,它可以連接到remoteip。
每當我想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!
警告
檢查詹金斯機器中的權限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: -
我也更新了這個範例,我認為有些命令有效,但有些命令無效。
更新: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機器中以ubuntu身份登錄
這是結果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
無法儲存主機標識,如下所示
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
第一次它應該保存主機標識,下次它不應該再次詢問。之後你的scp
命令應該可以工作。