ไม่สามารถเจรจากับ XX.XXX.XX.XX: ไม่พบประเภทคีย์โฮสต์ที่ตรงกัน ข้อเสนอของพวกเขา: ssh-dss


110

ฉันกำลังพยายามสร้างที่เก็บ git บนโฮสต์เว็บของฉันและโคลนบนคอมพิวเตอร์ของฉัน นี่คือสิ่งที่ฉันทำ:

  1. ฉันสร้างที่เก็บบนรีโมตเซิร์ฟเวอร์
  2. ฉันสร้างคู่คีย์: ssh-keygen -t dsa.
  3. ฉันเพิ่มรหัสของฉันไปที่ ssh-agent
  4. ฉันคัดลอกไปยังคีย์สาธารณะของเซิร์ฟเวอร์ใน~/.ssh.

จากนั้นหลังจากพยายามเรียกใช้คำสั่งgit clone ssh://user@host/path-to-repositoryฉันได้รับข้อผิดพลาด:

ไม่สามารถเจรจากับ XX.XXX.XX.XX: ไม่พบประเภทคีย์โฮสต์ที่ตรงกัน ข้อเสนอของพวกเขา: ssh-dss
ร้ายแรง: ไม่สามารถอ่านจากที่เก็บระยะไกล
โปรดตรวจสอบว่าคุณมีสิทธิ์การเข้าถึงที่ถูกต้องและมีที่เก็บอยู่

นั่นหมายความว่าอย่างไร?


คำตอบ:


171

เวอร์ชัน openssh ล่าสุดเลิกใช้คีย์ DSA โดยค่าเริ่มต้น คุณควรแนะนำให้ผู้ให้บริการ GIT ของคุณเพิ่มรหัสโฮสต์ที่สมเหตุสมผล การใช้ DSA เพียงอย่างเดียวไม่ใช่ความคิดที่ดี

เป็นวิธีแก้ปัญหาที่คุณต้องการจะบอกคุณsshลูกค้าที่คุณต้องการจะยอมรับกุญแจของโฮสต์ DSA ตามที่อธิบายไว้ในเอกสารอย่างเป็นทางการสำหรับการใช้งานแบบเดิม คุณมีความเป็นไปได้น้อย แต่ผมแนะนำให้เพิ่มบรรทัดเหล่านี้เป็นของคุณ~/.ssh/configไฟล์:

Host your-remote-host
    HostkeyAlgorithms +ssh-dss

ความเป็นไปได้อื่น ๆ คือการใช้ตัวแปรสภาพแวดล้อมGIT_SSHเพื่อระบุตัวเลือกเหล่านี้:

GIT_SSH_COMMAND="ssh -oHostKeyAlgorithms=+ssh-dss" git clone ssh://user@host/path-to-repository

1
ตอนนี้มันทำงานได้โดยไม่ต้องระบุชื่อโฮสต์เพียงแค่มีHostkeyAlgorithms +ssh-dss. ขอบคุณ.
giovannipds

1
@giovannipds แน่นอนว่าต้องเป็นโฮสต์ระยะไกลที่คุณกำลังเชื่อมต่อ @ downvoters อธิบาย downvotes น่าจะดี
Jakuje

@Jakuje ขอโทษด้วยฉันคลิกผิดและเนื่องจากไม่สามารถเปลี่ยนแปลงได้ในทันทีฉันจึงไม่สามารถอัปเดตคำตอบของฉันได้
giovannipds

1
@Jakuje ฉันอัปเดตการโหวตของฉันแล้วเพื่อแจ้งให้คุณทราบ =)
giovannipds

หากไม่มีไฟล์ดังกล่าวในไดเร็กทอรี. ssh ของคุณไฟล์ข้อความว่างชื่อ "config" จะทำ
RMorrisey

78

คุณยังสามารถเพิ่ม-oHostKeyAlgorithms=+ssh-dssในบรรทัด ssh ของคุณ:

ssh -oHostKeyAlgorithms=+ssh-dss user@host

นี่เป็นวิธีแก้ปัญหาที่เร็วที่สุด +1 เนื่องจากยังแก้ไขปัญหาสำหรับโฮสต์นั้นอย่างถาวร ข้อเสนอแนะอีกประการหนึ่งสำหรับการรันระยะยาวคือหากเป็นไปได้ระบบโฮสต์ควรมี SSH daemon ที่อัปเกรดเนื่องจากดูเหมือนว่า DSS จะถือว่าไม่ปลอดภัยอีกต่อไป
Areeb Soo Yasir

20

สำหรับฉันสิ่งนี้ได้ผล: (เพิ่มเข้าไปใน.ssh\config)

Host *
HostkeyAlgorithms +ssh-dss
PubkeyAcceptedKeyTypes +ssh-dss

ตัวเลือกที่สองไม่เกี่ยวข้องกับปัญหาและตัวเลือกแรกได้กล่าวไว้แล้วในคำตอบของฉัน
Jakuje

โฮสต์โฮสต์ของคุณไม่ได้ผลสำหรับฉันหากโฮสต์ของคุณคือชื่อโฮสต์ที่ฉันเรียกใช้คำสั่ง ssh จาก (ไคลเอนต์) แต่โฮสต์ * ทำงานให้ฉัน
Krischu

2
@ Krischu ไม่yuor-hostเป็นเจ้าภาพที่คุณกำลังsshต่อต้าน การตั้งค่าเริ่มต้นที่ไม่ปลอดภัยสำหรับโฮสต์ทั้งหมดเป็นความคิดที่ไม่ดีเสมอไป
Jakuje

10

หากคุณเป็นเหมือนฉันและไม่ต้องการสร้างระบบรูความปลอดภัยนี้หรือแบบกว้างสำหรับผู้ใช้คุณสามารถเพิ่มตัวเลือก config ให้กับ git repos ที่ต้องการสิ่งนี้ได้โดยเรียกใช้คำสั่งนี้ใน repos เหล่านั้น (หมายเหตุใช้งานได้กับเวอร์ชัน git เท่านั้น> = 2.10 เปิดตัว 2016-09-04)

git config core.sshCommand 'ssh -oHostKeyAlgorithms=+ssh-dss'

สิ่งนี้จะใช้ได้หลังจากตั้งค่า repo แล้วเท่านั้น หากคุณไม่สะดวกที่จะเพิ่มรีโมตด้วยตนเอง (และเพียงแค่ต้องการโคลน) คุณสามารถเรียกใช้การโคลนได้ดังนี้:

GIT_SSH_COMMAND='ssh -oHostKeyAlgorithms=+ssh-dss' git clone ssh://user@host/path-to-repository

จากนั้นรันคำสั่งแรกเพื่อทำให้ถาวร

หากคุณไม่มีข้อมูลล่าสุดและยังคงต้องการให้หลุมอยู่ในพื้นที่มากที่สุดฉันขอแนะนำให้ใส่

export GIT_SSH_COMMAND='ssh -oHostKeyAlgorithms=+ssh-dss'

ในไฟล์ที่ไหนสักแห่งให้พูดgit_ssh_allow_dsa_keys.shและsourceนำเข้าเมื่อจำเป็น


3

ฉันต้องการทำงานร่วมกับโซลูชันสำหรับฝั่งเซิร์ฟเวอร์เล็กน้อย ดังนั้นเซิร์ฟเวอร์บอกว่าไม่รองรับ DSA เนื่องจากไคลเอนต์ openssh ไม่เปิดใช้งานตามค่าเริ่มต้น :

OpenSSH 7.0 ขึ้นไปปิดใช้งานอัลกอริธึมคีย์สาธารณะ ssh-dss (DSA) ในทำนองเดียวกัน มันอ่อนแอเกินไปและเราไม่แนะนำให้ใช้

ดังนั้นเพื่อแก้ไขปัญหานี้ในฝั่งเซิร์ฟเวอร์ฉันควรเปิดใช้งานอัลกอริทึมคีย์อื่น ๆ เช่น RSA o ECDSA ฉันเพิ่งมีปัญหากับเซิร์ฟเวอร์ใน lan ฉันขอแนะนำสิ่งต่อไปนี้:

อัปเดต openssh:

yum update openssh-server

รวมคอนฟิกูเรชันใหม่ใน sshd_config หากมี sshd_config.rpmnew

ตรวจสอบว่ามีคีย์โฮสต์ที่ / etc / ssh / man ssh-keygenถ้าไม่ได้สร้างคนใหม่ให้ดู

$ ll /etc/ssh/
total 580
-rw-r--r--. 1 root root     553185 Mar  3  2017 moduli
-rw-r--r--. 1 root root       1874 Mar  3  2017 ssh_config
drwxr-xr-x. 2 root root       4096 Apr 17 17:56 ssh_config.d
-rw-------. 1 root root       3887 Mar  3  2017 sshd_config
-rw-r-----. 1 root ssh_keys    227 Aug 30 15:33 ssh_host_ecdsa_key
-rw-r--r--. 1 root root        162 Aug 30 15:33 ssh_host_ecdsa_key.pub
-rw-r-----. 1 root ssh_keys    387 Aug 30 15:33 ssh_host_ed25519_key
-rw-r--r--. 1 root root         82 Aug 30 15:33 ssh_host_ed25519_key.pub
-rw-r-----. 1 root ssh_keys   1675 Aug 30 15:33 ssh_host_rsa_key
-rw-r--r--. 1 root root        382 Aug 30 15:33 ssh_host_rsa_key.pub

ตรวจสอบใน / etc / ssh / sshd_config การกำหนดค่า HostKey ควรอนุญาตการกำหนดค่า RSA และ ECDSA (หากมีการแสดงความคิดเห็นตามค่าเริ่มต้นทั้งหมดจะอนุญาตให้ใช้ RSA ได้เช่นกันโปรดดูในman sshd_configส่วนของ HostKey)

# HostKey for protocol version 1
#HostKey /etc/ssh/ssh_host_key
# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key

สำหรับฝั่งไคลเอ็นต์ให้สร้างคีย์สำหรับ ssh (ไม่ใช่ DSA เหมือนในคำถาม) โดยทำสิ่งนี้:

ssh-keygen

หลังจากนี้เนื่องจากมีตัวเลือกมากกว่า ssh-dss (DSA) ไคลเอนต์ openssh (> = v7) ควรเชื่อมต่อกับ RSA หรืออัลกอริทึมที่ดีกว่า

นี่เป็นอีกหนึ่งบทความที่ดี

นี่เป็นคำถามแรกของฉันฉันยินดีรับข้อเสนอแนะ: D.


1

หนึ่งจะระบุอัลกอริทึมหลายอย่างได้อย่างไร? ฉันถามเพราะ git เพิ่งอัปเดตบนแล็ปท็อปที่ทำงานของฉัน (Windows 10 โดยใช้ Git อย่างเป็นทางการสำหรับ Windows build) และฉันได้รับข้อผิดพลาดนี้เมื่อฉันพยายามส่งสาขาโครงการไปยังรีโมต Azure DevOps ของฉัน ฉันพยายามดัน - set-upstream และรับสิ่งนี้:

Unable to negotiate with 20.44.80.98 port 22: no matching key exchange method found. Their offer: diffie-hellman-group1-sha1,diffie-hellman-group14-sha1
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

แล้วเราจะนำคำแนะนำข้างต้นไปใช้สำหรับทั้งสองข้อได้อย่างไร? (ในการดำเนินการอย่างรวดเร็วฉันใช้โซลูชันของ @ golvok กับ group14 และได้ผล แต่ฉันไม่รู้ว่า 1 หรือ 14 ดีกว่ากันแน่)


-3

คุณทำตามแนวทางข้างต้นหรือแนวทางนี้

สร้างไฟล์ config ในไดเร็กทอรี. ssh และเพิ่มบรรทัดเหล่านี้

host xxx.xxx
 Hostname xxx.xxx
 IdentityFile ~/.ssh/id_rsa
 User xxx
 KexAlgorithms +diffie-hellman-group1-sha1

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