การตรวจสอบคีย์โฮสต์เจนกินส์ล้มเหลว


164

ฉันมีปัญหากับเจนกินส์การตั้งค่า "git" แสดงข้อผิดพลาดต่อไปนี้:

Failed to connect to repository : Command "git ls-remote -h https://person@bitbucket.org/person/projectmarket.git HEAD" returned status code 128:
stdout:
stderr: fatal: Authentication failed

ฉันได้ทดสอบกับssh :

git@bitbucket.org:person/projectmarket.git

นี่เป็นข้อผิดพลาด:

Failed to connect to repository : Command "git ls-remote -h git@bitbucket.org:person/projectmarket.git HEAD" returned status code 128:
stdout:
stderr: Host key verification failed.
fatal: The remote end hung up unexpectedly

ฉันได้ทำตามขั้นตอนเหล่านี้ด้วย "คีย์ SSH" แล้ว

เข้าสู่ระบบภายใต้เจนกินส์

sudo su jenkins

คัดลอกคีย์ github ของคุณไปยังโฟลเดอร์ Jenkins .ssh

cp ~/.ssh/id_rsa_github* /var/lib/jenkins/.ssh/

เปลี่ยนชื่อคีย์

mv id_rsa_github id_rsa
mv id_rsa_github.pub id_rsa.pub

แต่ก็ยังไม่ได้ทำงานที่เก็บคอมไพล์ในเจนกินส์

ขอบคุณด้วยความช่วยเหลือ!.



ไม่มีผู้ใช้ jenkins ที่มีอยู่
IceFire

คำตอบ:


183

เปลี่ยนเป็นjenkinsผู้ใช้และรันคำสั่งด้วยตนเอง:

git ls-remote -h git@bitbucket.org:person/projectmarket.git HEAD

คุณจะได้รับคำเตือน SSH มาตรฐานเมื่อเชื่อมต่อกับโฮสต์ใหม่ผ่าน SSH ครั้งแรก:

The authenticity of host 'bitbucket.org (207.223.240.181)' can't be established.
RSA key fingerprint is 97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40.
Are you sure you want to continue connecting (yes/no)?

พิมพ์yesและกด Enter รหัสโฮสต์สำหรับbitbucket.orgตอนนี้จะถูกเพิ่มลงใน~/.ssh/known_hostsไฟล์และคุณจะไม่ได้รับข้อผิดพลาดใน Jenkins อีกต่อไป


6
แสดงสิ่งนี้: การอนุญาตที่ถูกปฏิเสธ (publickey) ร้ายแรง: ปลายระยะไกลวางสายโดยไม่คาดคิด
AM Mérida

6
ใช่ แต่นั่นเป็นข้อผิดพลาดที่แตกต่างอย่างสิ้นเชิง ตอนนี้คุณต้องไปเพิ่มกุญแจสาธารณะของคุณไปยังพื้นที่เก็บข้อมูลที่ bitbucket.org
ctc

4
ดูขั้นตอนที่ 6 ที่นี่: confluence.atlassian.com/display/BITBUCKET/Set+up+SSH+for+Git
ctc

2
+1 สำหรับ "worksforme" มีปัญหาเดียวกันแน่นอน สร้าง id_rsa สำหรับผู้ใช้ที่เหมาะสม chmod-ed ถึง jenkins เพิ่มรหัสสาธารณะ แต่ก็ไม่สามารถใช้งานได้ การลองคอมไพล์ด้วย sudo -u jenkins ให้ไฟล์ knonwn_hosts แก้ไขปัญหา
sibidiba

3
คุณต้องเรียกใช้ในฐานะผู้ใช้ที่ใช้งาน Jenkins ในระบบส่วนใหญ่มักใช้งานเป็นผู้ใช้แยกต่างหาก (เช่นผู้ใช้ 'jenkins') ดังนั้นคุณจะต้องสลับไปยังผู้ใช้นั้นเพื่อให้แน่ใจว่าที่อยู่สำหรับ bitbucket.org ถูกเพิ่มเข้าไปใน ~ / .ssh / known_hosts
ctc

43

เจนกินส์เป็นบัญชีบริการไม่มีเชลล์ตามการออกแบบ เป็นที่ยอมรับกันโดยทั่วไปว่าบัญชีบริการ ไม่ควรเข้าสู่ระบบแบบโต้ตอบ

หากต้องการแก้ไข "การตรวจสอบคีย์โฮสต์ Jenkins ล้มเหลว" ให้ทำตามขั้นตอนต่อไปนี้ ฉันใช้ Mercurial กับเจนกินส์

1) ดำเนินการคำสั่งต่อไปนี้บนสถานี

             $ sudo su -s /bin/bash jenkins

ให้รหัสผ่าน

2) สร้างกุญแจส่วนตัวสาธารณะโดยใช้คำสั่งต่อไปนี้:

              ssh-keygen

คุณสามารถดูผลลัพธ์เป็น ::

Generating public/private rsa key pair. 
Enter file in which to save the key (/var/lib/jenkins/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 

3) กด Enter -> อย่าให้ข้อความรหัสผ่าน -> กด Enter

             Key has been generated

4) ไปที่ -> cat /var/lib/jenkins/.ssh/id_rsa.pub

5) คัดลอกคีย์จาก id_rsa.pub

6) ออกจากการทุบตี

7) ssh@yourrepository

8) vi .ssh/authorized_keys

9) วางกุญแจ

10) ทางออก

11) เข้าสู่ระบบเซิร์ฟเวอร์ด้วยตนเอง

หมายเหตุ: กรุณาเข้าสู่ระบบด้วยตนเองมิฉะนั้นเจนกินส์จะให้ข้อผิดพลาดอีกครั้ง "การยืนยันโฮสต์ล้มเหลว"

12) เมื่อทำเองตอนนี้ไปเจนกินส์และให้สร้าง

สนุก!!!

โชคดี


ขอรหัสผ่านอะไรที่นี่?
IceFire

26

หรือคุณสามารถใช้:

ssh -oStrictHostKeyChecking=no host

สิ่งนี้จะไม่ปลอดภัย (คนที่อยู่ตรงกลางของการโจมตี) แต่วิธีที่ง่ายที่สุด

วิธีที่ดีกว่าคือการสร้างการแมปที่ถูกต้องระหว่างโฮสต์และที่อยู่ IP ดังนั้นsshจะไม่บ่น:

#!/bin/bash

for domain in "github.com" "bitbucket.org"; do
    sed -i "/$domain/d" ~/.ssh/known_hosts
    line=$(ssh-keyscan $domain,`nslookup $domain | awk '/^Address: / { print $2 ; exit }'`)
    echo $line >> ~/.ssh/known_hosts
done

ตัดตอนมาจากเค้า


3
สิ่งนี้จะเปิดคุณสู่การโจมตี MITM
ctc

1
คุณสามารถเพิ่ม -oStrictHostKeyChecking = no และเชื่อมต่อหนึ่งครั้งซึ่งจะเพิ่มโฮสต์ไปยังไฟล์ known_hosts (เช่นเดียวกับเมื่อคุณ ssh บนบรรทัดคำสั่งและพิมพ์ yes เพื่อเพิ่มคีย์เข้ากับไฟล์ known_hosts) จากนั้นลบตัวเลือกนี้หลังจากนั้น
krupan

6

มีปัญหาเดียวกันฉันแก้ไขได้เช่น:

รีเซ็ตสิทธิ์ใน id_rsa * สำหรับผู้ใช้ปัจจุบันเท่านั้นไม่มีกลุ่มอื่น

chmod o-rwx ~/.ssh/id*
chmod G-rwx ~/.ssh/id*

ls -lart ~/.ssh/


-rw-------  1 jenkins nogroup  398 avril  3 09:34 id_rsa.pub
-rw-------  1 jenkins nogroup 1675 avril  3 09:34 id_rsa

และชัดเจน ~ / .ssh / know_hosts

ตอนนี้เชื่อมต่อเป็นเจนกินส์

sudo su jenkins

ลองคำสั่งเจนกินส์

git ls-remote -h git@bitbucket.org:user/project.git HEAD

หากไม่มีปัญหาปรากฏขึ้นตอนนี้เจนกินส์จะสามารถเชื่อมต่อ repo ได้ (สำหรับฉัน ^^ อย่างน้อย)


1
คำสั่งดังกล่าว (chmod G-rwx ~ / .ssh / id *) สำหรับการเปลี่ยนสิทธิ์ของกลุ่มล้มเหลว ทำงานด้านล่างตามที่ต้องการ chmod g-rwx ~ / .ssh / id *
samaitra


3
  • ตรวจสอบให้แน่ใจว่าเราไม่ได้แก้ไขคุณสมบัติ sshd_config เริ่มต้นใด ๆ เพื่อข้ามข้อผิดพลาด

  • การยืนยันโฮสต์ล้มเหลว - รายการโฮสต์ที่ขาดหายไปในknown_hostsไฟล์แน่นอน

  • ล็อกอินเข้าสู่เซิร์ฟเวอร์ที่กระบวนการล้มเหลวและทำสิ่งต่อไปนี้:

    1. Sudo สำหรับผู้ใช้ที่กำลังดำเนินการ

    2. ssh-copy-id destinationuser@destinationhostname

    3. มันจะแสดงข้อความนี้เป็นครั้งแรกตอบว่าใช่และจะถามรหัสผ่านเป็นครั้งแรกด้วย:

      The authenticity of host 'sample.org (205.214.640.91)' can't be established.
      RSA key fingerprint is 97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40.
      Are you sure you want to continue connecting (yes/no)? *yes*
      

      แจ้งรหัสผ่าน? ให้รหัสผ่าน

    4. ssh destinationuser@destinationhostnameขณะนี้จากเซิร์ฟเวอร์ที่กำลังเรียกใช้กระบวนการทำ ควรเข้าสู่ระบบโดยไม่มีรหัสผ่าน

      หมายเหตุ:อย่าเปลี่ยนการอนุญาตเริ่มต้นของไฟล์ในไดเรกทอรี. sshของผู้ใช้คุณจะพบกับปัญหาที่แตกต่างกัน


ในขั้นตอนที่ 3 อาจเป็นกรณีที่คุณได้รับพร้อมท์ด้วยรหัสที่มีอยู่แล้วในไฟล์ แต่คุณควรดำเนินการต่อ 4 ขั้นตอนนี้และถ้าคุณสามารถเข้าสู่ระบบโดยไม่ต้องใช้รหัสผ่านจากผู้ใช้ jenkins
Rakibul Haq

3

สำหรับวิธีแก้ปัญหา (เช่นทาสของ Windows) ให้กำหนดตัวแปรสภาพแวดล้อมต่อไปนี้ในคุณสมบัติส่วนกลาง:

GIT_SSH_COMMAND="ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no"

เจนกินส์, คุณสมบัติทั่วโลก, ตัวแปรสภาพแวดล้อม, GIT_SSH_COMMAND

หมายเหตุ: หากคุณไม่เห็นตัวเลือกที่คุณอาจจะต้องEnvInjectปลั๊กอินสำหรับมัน


3

คัดลอกคีย์โฮสต์จากทั้ง bitbucket และ Github:

ssh root@deployserver 'echo "$(ssh-keyscan -t rsa,dsa bitbucket.org)" >> /root/.ssh/known_hosts'
ssh root@deployserver 'echo "$(ssh-keyscan -t rsa,dsa github.com)" >> /root/.ssh/known_hosts'

2

วิธีที่ดีที่สุดคุณสามารถใช้ "git url" ของคุณในรูปแบบ 'https "URL ใน Jenkinsfile หรือที่ใดก็ได้ที่คุณต้องการ

git url: 'https://github.com/jglick/simple-maven-project-with-tests.git'


2

SSH

หากคุณลองใช้กับ SSH ข้อผิดพลาดการยืนยันคีย์โฮสต์อาจเกิดขึ้นได้จากหลายสาเหตุทำตามขั้นตอนต่อไปนี้เพื่อเอาชนะเหตุผลทั้งหมด

  1. ตั้งค่าตัวแปรสภาพแวดล้อมเป็นหน้าแรกและระบุที่อยู่เป็นไดเรกทอรีรากของโฟลเดอร์. ssh เช่น: - หาก. ssh ของคุณถูกเก็บไว้ในโฟลเดอร์ชื่อ C: / Users / ชื่อ
  2. ตอนนี้ตรวจสอบให้แน่ใจว่ามีการระบุคีย์ SSH สาธารณะในลิงก์ที่เก็บด้วย ไม่ว่าจะเป็น github หรือ bitbucket หรืออื่น ๆ
  3. เปิดทุบตีคอมไพล์ และลองโคลนโครงการจากพื้นที่เก็บข้อมูล สิ่งนี้จะช่วยในการเพิ่ม URL ที่เก็บข้อมูลของคุณในไฟล์รู้จัก _host ซึ่งกำลังสร้างอัตโนมัติในโฟลเดอร์. ssh
  4. ตอนนี้เปิดเจนกินส์และสร้างงานใหม่ จากนั้นคลิกที่การกำหนดค่า
  5. ระบุ URL การโคลนในการจัดการซอร์สโค้ดภายใต้ Git URL ควรเริ่มต้นด้วย git@github.com / ......... หรือ ssh: // proje ........
  6. ภายใต้หนังสือรับรองคุณจะต้องเพิ่มชื่อผู้ใช้และรหัสผ่านของแบบฟอร์มพื้นที่เก็บข้อมูลของคุณซึ่งคุณกำลังโคลนโครงการ เลือกข้อมูลรับรองนั้น
  7. และตอนนี้ใช้และบันทึกการกำหนดค่า
  8. บิงโก! เริ่มสร้างโครงการ ฉันหวังว่าตอนนี้คุณจะไม่ได้รับข้อผิดพลาดการยืนยันคีย์โฮสต์!

2
  1. เข้าสู่ระบบโดยใช้ jenkins: "sudo su -s / bin / bash jenkins"
  2. git โคลน repo ที่ต้องการซึ่งทำให้เกิดข้อผิดพลาดที่สำคัญ
  3. มันจะขอให้คุณเพิ่มคีย์โดยแสดงใช่ / ไม่ใช่ (ป้อนใช่หรือ y)

แค่นั้นแหละ!

ตอนนี้คุณสามารถเรียกใช้งานเจนกินส์ได้อีกครั้ง

ฉันหวังว่าคุณจะดำเนินการแก้ไขปัญหาของคุณ


2

ฉันพบปัญหานี้และพบปัญหาคือบริการเจนกินส์ไม่ได้ถูกเรียกใช้ในฐานะผู้ใช้เจนกินส์ ดังนั้นการเรียกใช้คำสั่งในขณะที่ผู้ใช้เจนกินส์ทำงานได้ดี


1

ลอง

ssh-keygen -R ชื่อโฮสต์

-R hostname ลบคีย์ทั้งหมดที่เป็นของชื่อโฮสต์ออกจากไฟล์ known_hosts ตัวเลือกนี้มีประโยชน์ในการลบโฮสต์ที่ถูกแฮช

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.