วิธีแก้ไขคำเตือนเกี่ยวกับคีย์โฮสต์ ECDSA


287

ฉันกำลังพยายามตั้งค่า SSH ให้น้อยกว่ารหัสผ่านบนเซิร์ฟเวอร์ Ubuntu ด้วยssh-copy-id myuser@myserverแต่ฉันได้รับข้อผิดพลาด:

คำเตือน: คีย์โฮสต์ ECDSA สำหรับ 'myserver' แตกต่างจากคีย์สำหรับที่อยู่ IP '192.168.1.123'

อะไรเป็นสาเหตุของปัญหานี้และฉันจะแก้ไขได้อย่างไร ฉันพยายามลบ.sshไดเรกทอรีบนเครื่องระยะไกลและเรียกใช้ssh-keygen -R "myserver"ในเครื่อง แต่วิธีนี้ไม่สามารถแก้ไขข้อผิดพลาดได้


ในกรณีของฉันฉันเปลี่ยนเซิร์ฟเวอร์ (IP) The ECDSA host key for server has changedผูกกับโดเมนแล้ว ~/.ssh/known_hostsวิธีของฉันคือเอาสตริงแคชที่เกี่ยวข้องเกี่ยวกับประสิทธิภาพในการ จากนั้น ssh ใช้งานได้
Ninja

คำตอบ:


415

ลบรหัสแคชสำหรับ192.168.1.123บนเครื่องท้องถิ่น:

ssh-keygen -R 192.168.1.123

14
ไม่ทำงานสำหรับฉันในการติดตั้งเซิร์ฟเวอร์ Debian ที่ทำงานเมื่อ SSHing จากที่บ้าน นอกจากนี้คำตอบยังค่อนข้างสั้น
Chris K

/home/wf/.ssh/known_hosts อัปเดตแล้ว เนื้อหาต้นฉบับที่เก็บไว้เป็น /home/wf/.ssh/known_hosts.old "คำเตือน: เพิ่มคีย์โฮสต์ ECDSA สำหรับที่อยู่ IP 'xxxx' อย่างถาวรในรายการโฮสต์ที่รู้จัก" จะปรากฏขึ้น และดูเหมือนว่าจะทำงาน
Wolfgang Fahl

13
คุณสามารถอัปเดตรหัสแทนการลบได้ ใช้ssh-keyscan -t ecdsa my.server.domain >> ~/.ssh/known_hostsหลังจากนั้นคุณไม่จำเป็นต้องยืนยันคีย์ใหม่ในตอนแรกที่เชื่อมต่อกับโฮสต์
Alex

2
สำหรับผู้ที่ไม่ประสบความสำเร็จในการทำงาน: ฉันได้ลงทะเบียนหลายรายการที่เกิดขึ้นของ IP เดียวกัน: 1 / ที่อยู่ IP ดังกล่าว (xx.xx.xx.xx), โดเมน (tomsihap.fr), เซิร์ฟเวอร์ vps ของผู้ให้บริการ ที่อยู่ (vpsxxx.ovh.net) ssh-keygen -R สำหรับการทำงานแต่ละอย่าง
tomsihap

ใช้งานได้สำหรับฉัน แต่ความสับสนอาจมาจากคำสั่งนี้โฮสต์ซึ่งจะทำงานหรือไม่ คำตอบนั้นมาจากคำตอบที่แสดงข้อผิดพลาด คำถามและคำตอบที่สองมีความชัดเจนมากขึ้น แต่ในกรณี: ที่อยู่ที่จะส่งไปยัง ssh-keygen -R? ที่อยู่ที่ตัวเลขในคำสั่งข้อผิดพลาด
Russ Bateman

63

ในกรณีของฉันssh-keygen -R ...ไม่ได้แก้ไขคำเตือน ฉันมีข้อมูลเพิ่มเติมเช่นนี้:

Offending key for IP in /home/myuser/.ssh/known_hosts:8
Matching host key in /home/myuser/.ssh/known_hosts:24

ฉันเพียงแค่แก้ไข~/.ssh/known_hostsและลบบรรทัดที่ 8 ด้วยตนเอง("คีย์ที่ละเมิด") ฉันพยายามเชื่อมต่อใหม่โฮสต์ถูกเพิ่มอย่างถาวรและทุกอย่างก็ดีหลังจากนั้น!


2
ทำงานเหมือนจับใจ สามารถแก้ไขได้ในหนึ่งบรรทัดด้วยsed -e '8d' /home/myuser/.ssh/known_hostsแทนที่หมายเลขบรรทัด8และชื่อไฟล์ด้วยที่ปรากฏในระบบของคุณ
Alex P. Miller

ปัญหาของฉันกับวิธีนี้คือมันค่อนข้างสับสนถ้าknown_hosts:8อ้างอิงถึงค่าที่มีดัชนีเป็นศูนย์หรือไม่ ดีใจที่รู้ว่ามันเป็นแผนที่ 1: 1 ...
Daniel F

ฉันสังเกตเห็นว่าสิ่งนี้เกิดขึ้นถ้าคุณใช้พอร์ตที่ไม่ได้มาตรฐานเช่น 2022 ในกรณีนี้คุณต้องทำssh-keygen -R [hostname]:2022
Alexander Malfait

19

ฉันทำสิ่งต่าง ๆ มากมายระหว่างคอมพิวเตอร์ LAN ของฉันและบัญชีเว็บโฮสติ้งสองบัญชีของฉันดังนั้นฉันจึงแยกแยะอัตราต่อรองและจบลงด้วย SSH รวมถึงปัญหาการตรวจสอบสิทธิ์ssh -vเพื่อดูว่าเกิดอะไรขึ้นและผิดพลาด

เมื่อได้แก้ไขปัญหานี้แล้วและไม่พอใจกับคำตอบฉันต้องการรู้ว่า "ทำไม" ตัวฉันเอง ...

ทริกเกอร์สำหรับกรณีของฉันคือ: ติดตั้งระบบปฏิบัติการเซิร์ฟเวอร์ใหม่ในที่ทำงานและเมื่อติดตั้งแพ็คเกจ openssh-server จะมีการสร้างชุดคีย์โฮสต์ใหม่บนเซิร์ฟเวอร์ของงาน ก่อนหน้านี้ระบบปฏิบัติการเซิร์ฟเวอร์ของฉันทั้งหมดเป็น Ubuntu และคราวนี้เปลี่ยนเป็น Debian (และฉันสงสัยว่ามีการอนุญาตที่แตกต่างกัน)

เมื่อทุกระบบปฏิบัติการเป็น Ubuntu และฉันติดตั้งระบบปฏิบัติการของเซิร์ฟเวอร์ใหม่โดยใช้ SSH ตัวแรกฉันได้รับคำเตือนแบบนี้ซึ่งฉันชอบคำเตือนแบบเงียบ ๆ ข้างต้น!

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
06:ea:f1:f8:db:75:5c:0c:af:15:d7:99:2d:ef:08:2a.
Please contact your system administrator.
Add correct host key in /home/user/.ssh/known_hosts to get rid of this message.
Offending key in /home/user/.ssh/known_hosts:4
RSA host key for domain.com has changed and you have requested strict checking.
Host key verification failed.

จากนั้นฉันก็เปิด~/.ssh/known_hostsคอมพิวเตอร์ที่เริ่มต้น ssh ลบบรรทัดนั้นเชื่อมต่อใหม่และสิ่งนี้เกิดขึ้น:

chris@home ~ $ ssh work
The authenticity of host '[work]:11122 ([99.85.243.208]:11122)' can't be established.
ECDSA key fingerprint is 56:6d:13:be:fe:a0:29:ca:53:da:23:d6:1d:36:dd:c5.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '[work]:11122 ([99.85.243.208]:11122)' (ECDSA) to the list of known hosts.
Linux rock 3.2.0-4-amd64 #1 SMP Debian 3.2.51-1 x86_64

บิตนั้นเกี่ยวกับ: 11122 คือหมายเลขพอร์ตที่ฉันกำหนดเส้นทาง SSH จากบนไฟร์วอลล์

ฉันตรวจสอบข้อมูลสำรองจากเซิร์ฟเวอร์ Ubuntu เดิมและไม่เห็นด้วยกับการติดตั้ง Debian ใหม่ของฉัน:

Ubuntu:                                            Debian:
# Package generated configuration file             # Package generated configuration file
# See the sshd(8) manpage for details              # See the sshd_config(5) manpage for details

# What ports, IPs and protocols we listen for      # What ports, IPs and protocols we listen for
Port 22                                            Port 22
# Use these options to restrict which interface    # Use these options to restrict which interfaces
#ListenAddress ::                                  #ListenAddress ::
#ListenAddress 0.0.0.0                             #ListenAddress 0.0.0.0
Protocol 2                                         Protocol 2
# HostKeys for protocol version 2                  # HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key                  HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key                  HostKey /etc/ssh/ssh_host_dsa_key
------------------------------------------------   HostKey /etc/ssh/ssh_host_ecdsa_key
#Privilege Separation is turned on for security    #Privilege Separation is turned on for security
UsePrivilegeSeparation yes                         UsePrivilegeSeparation yes

ดังนั้นใช่น่าจะเป็นโฮสต์เริ่มใช้คีย์ ecdsa เมื่อเร็ว ๆ นี้ซึ่งตามการเปลี่ยนแปลงของ Ubuntu เมื่อเร็ว ๆ นี้ฉันจะโทษการปรับปรุง Ubuntu ออกห่างจากระบบปฏิบัติการลินุกซ์ที่แข็งกร้าวซึ่งเป็นเหตุผลว่าทำไมฉันจึงติดตั้ง Debian ในเวลานี้

ฉันอ่านระบบรักษาความปลอดภัย SE q / a บน ecdsaและลบบรรทัดนั้นออกจากsshd_configเซิร์ฟเวอร์ Debian ใหม่ของฉันแล้ว (และวิ่งservice ssh restart)


2
+1 สำหรับบล็อกการเปรียบเทียบแบบเคียงข้างกัน คุณช่วยเพิ่ม URL ที่มีความซ้ำซ้อน "อูบุนตูเปลี่ยนไปจากระบบลินุกซ์แข็ง" หมายความว่าอะไร?
bgoodr

@boodr เป็นความเห็นของฉันและขึ้นอยู่กับการตั้งค่าเซิร์ฟเวอร์ไฟล์ RAID ของฉันเองหลายครั้งในช่วงไม่กี่ปีที่ผ่านมา : / อึหาคำตอบ แต่เริ่ม googling ubuntu debian serverแล้วคุณจะเห็นว่าฉันหมายถึงอะไร
Chris K

1
@ChrisK คุณครับเป็นหัวหน้า ขอบคุณสำหรับคำตอบที่ละเอียดและกระชับ
sargas

6

พรอมต์เกิดขึ้นทุกครั้งเนื่องจากที่อยู่ IP เปลี่ยนตลอดเวลาเมื่อใช้การกำหนดที่อยู่แบบไดนามิก ลองใช้ IP แบบคงที่ดังนั้นคุณต้องเพิ่มคีย์เพียงครั้งเดียวเท่านั้น


1
จุดดีฉันพลาดที่มีคนพูดถึง ips แบบไดนามิกหรือไม่
Chris K

6

ssh-keygen -f "/root/.ssh/known_hosts" -R 192.168.1.123

สิ่งนี้ควรแทนที่คีย์ที่มีอยู่ภายใต้ known_hosts.old และสร้างใหม่ วิธีนี้ใช้ได้ผลกับฉันในสถานการณ์เดียวกัน


3

ฉันเพิ่มบรรทัดต่อไปนี้ใน ~ / .ssh / config ของฉันดังนั้นจึงปิดใช้งานการตรวจสอบโฮสต์ที่เข้มงวดสำหรับที่อยู่. local ทั้งหมด (ด้วยการจัดสรรที่อยู่ DHCP ที่อยู่ IP ของเครื่องในท้องถิ่นของฉันเปลี่ยนแปลงอยู่เสมอ)

host *.local
    StrictHostKeyChecking no

คุณยังคงได้รับคำเตือนที่ดีจากฉัน


2

คุณใช้ผู้ใช้เดียวกันสำหรับเชื่อมต่อหรือไม่

หากคุณลงชื่อเข้าใช้ในพีซีในพื้นที่เช่นผู้ใช้Johnและเชื่อมต่อกับเซิร์ฟเวอร์Bเช่นผู้ใช้Adolf @ Bและทุกอย่างก็โอเคก็ไม่ได้หมายความว่าทุกอย่างก็โอเคถ้าคุณลงชื่อเข้าใช้พีซีในพื้นที่เช่นผู้ใช้Janeและเชื่อมต่อกับเซิร์ฟเวอร์Bเช่นผู้ใช้อดอล์ฟ @ B

หากคุณต้องการเข้าสู่ระบบบนเซิร์ฟเวอร์ B ในฐานะผู้ใช้ Beda จาก PC Aโดยไม่ต้องใช้รหัสผ่านให้ลองใช้คำสั่งนี้ทั้งหมดจาก PC A :

ssh-keygen -t rsa

คำสั่งนี้สร้างคีย์และเก็บคีย์ไว้ในไฟล์ โปรดเว้นข้อความรหัสผ่านว่างเปล่า

ssh Beda@B mkdir -p .ssh

คำสั่งนี้สร้างไดเรกทอรีหากยังไม่มีอยู่ มิฉะนั้นอย่าพิมพ์ข้อความแสดงข้อผิดพลาด

cd ~/.ssh

คำสั่งนี้เปลี่ยนไดเร็กทอรีเป็นโฮมไดเร็กทอรีผู้ใช้ของคุณ / ssh

cat id_rsa.pub | ssh Beda@B 'cat >> .ssh/authorized_keys'

คำสั่งนี้พิมพ์ไฟล์id_rsa.pub (กุญแจสาธารณะของคุณ) ไปที่authorized_keysบนเซิร์ฟเวอร์

สำคัญ: Beda เป็นชื่อผู้ใช้ของคุณบนเซิร์ฟเวอร์ที่คุณกำลังเชื่อมต่อ B คือ IP ของเซิร์ฟเวอร์ของคุณ

ตอนนี้คุณสามารถเชื่อมต่อกับเซิร์ฟเวอร์ B โดยไม่ต้องใช้รหัสผ่านหรือวลีรหัสผ่าน:

ssh Beda@B

1
หรือเพียงแค่ใช้ ssh-copy-id เพื่อเติมไฟล์ authorized_keys ด้วยรหัส id_rsa.pub ของคุณโดยไม่ต้องยุ่งยากเพิ่ม
BlakBat

1

กระทู้ที่นี่อาจช่วย

โดยพื้นฐานแล้วคุณต้องการลบทั้งคีย์ RSA และ ECDSA สำหรับโฮสต์นั้นจากนั้นใช้ssh-keyscanเพื่อนำกลับไปไว้ในknown_hostsไฟล์ของคุณในลักษณะที่จะไม่ทำให้เกิดความขัดแย้งนี้ มันทำงานสำหรับฉันเมื่อฉันมีปัญหาเดียวกัน


1

คำถาม: อะไรทำให้เกิดสิ่งนี้ ...

ดังนั้นคีย์โฮสต์เซิร์ฟเวอร์ ssh จึงเปลี่ยนไป อะไรทำให้เกิดการเปลี่ยนแปลง มันยากที่จะพูด นี่คือการคาดเดาบางส่วน:

  • sshd บน myserver เริ่มใช้คีย์ ECDSA หรือไม่ดังนั้นจึงเป็นประเภทคีย์ใหม่
  • myserver เพิ่งติดตั้งใหม่หรือไม่
  • เมื่อไม่นานมานี้ sshd บน myserver จึงได้สร้างคีย์โฮสต์ ssh ใหม่ขึ้นมา?
  • มีคนสร้างหรือแทนที่คีย์โฮสต์ sshd อีกครั้งหรือไม่
  • ที่อยู่ IP ของ myserver มีการเปลี่ยนแปลงเพื่อให้โฮสต์ที่แตกต่างกันตอบไปยังที่อยู่ IP นั้นหรือไม่

คำถาม: ... และฉันจะแก้ไขได้อย่างไร

ดังที่คนอื่น ๆ ได้ตอบไปแล้วให้ลบคีย์โฮสต์ ECDSA ที่เก็บไว้ชั่วคราวสำหรับ myserver ว่าบัญชีของคุณแคชแล้ว


2
คำแนะนำที่ดี แต่ไม่ได้ตอบคำถาม ไม่ลองแม้แต่จะตอบคำถาม
boatcoder

1

ข้อผิดพลาดนี้ทำให้ฉันรำคาญเป็นเวลานาน ด้วยเหตุผลบางอย่างมันสร้างความแตกต่างไม่ว่าฉันจะทำ

ssh host

หรือ

ssh host.domain

https://askubuntu.com/questions/87449/how-to-disable-strict-host-key-checking-in-ssh

จากนั้นชี้ให้ฉันเห็นตัวเลือกในการเปลี่ยนไฟล์กำหนดค่า ดูสคริปต์ของฉันhttps://askubuntu.com/a/949731/129227 ที่นั่นเพื่อดำเนินการอัตโนมัติ


1
ใช้ค่าการกำหนดค่าCanonicalizeHostnameและCanonicalDomainsจะหลีกเลี่ยงการลบการตรวจสอบอย่างเข้มงวดและจะทำให้ ssh พิจารณาโฮสต์และ host.domain ให้เหมือนกัน
BlakBat

0

ฉันแก้ไขสิ่งนี้บน Chromebook ด้วยการถอนการติดตั้งและติดตั้ง Secure Shell อีกครั้ง ... มันทำงานได้อย่างมีเสน่ห์


นี่คือ overkill ดูคำตอบที่ง่ายกว่าในคำตอบของฉันที่นี่
Alex Yursha

0

นี่คือวิธีลบลายนิ้วมือโฮสต์ที่รู้จัก (จากknown_hostsไฟล์) บน Chrome OS:

ค้นหาดัชนีของรายการโฮสต์ที่ไม่เหมาะสมในเอาต์พุต ssh เมื่อการเชื่อมต่อล้มเหลว ตัวอย่างเช่นในบรรทัดด้านล่างดัชนีที่ละเมิดคือ7 :

Offending ECDSA key in /.ssh/known_hosts:7

เปิดคอนโซล JavaScript ( CTRL+ Shift+ J) ของหน้าต่าง Secure Shell และพิมพ์ต่อไปนี้แทนที่INDEXด้วยค่าที่เหมาะสม (เช่น7 ):

term_.command.removeKnownHostByIndex(INDEX);

วิธีการแก้ปัญหานี้ถูกยืมมาจากบล็อกของสิงห์ Gaggl

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