Cách sửa cảnh báo về khóa máy chủ ECDSA


287

Tôi đang cố gắng thiết lập SSH không có mật khẩu trên máy chủ Ubuntu ssh-copy-id myuser@myserver, nhưng tôi gặp lỗi:

Cảnh báo: khóa máy chủ ECDSA cho 'myserver' khác với khóa cho địa chỉ IP '192.168.1.123'

Điều gì gây ra điều này, và làm cách nào để khắc phục nó? Tôi đã thử xóa .sshthư mục trên máy từ xa và chạy ssh-keygen -R "myserver"cục bộ, nhưng điều này không khắc phục được lỗi.


trong trường hợp của tôi, tôi thay đổi máy chủ (ip) liên kết với tên miền, sau đó là The ECDSA host key for server has changed. Cách của tôi là loại bỏ chuỗi bộ đệm liên quan về tên miền trong ~/.ssh/known_hosts. Sau đó, ssh hoạt động.
Ninja

Câu trả lời:


415

Xóa khóa được lưu trong bộ nhớ cache cho 192.168.1.123máy cục bộ:

ssh-keygen -R 192.168.1.123

14
Tôi không làm việc với tôi trên máy chủ Debian mới cài đặt tại nơi làm việc khi SSH vào nhà. Ngoài ra, câu trả lời là khá ngắn gọn.
Chris K

/home/wf/.ssh/ Unknown_hosts được cập nhật. Nội dung gốc được giữ lại là /home/wf/.ssh/ Unknown_hosts.old "Cảnh báo: Đã thêm vĩnh viễn khóa máy chủ ECDSA cho địa chỉ IP 'xxxx' vào danh sách các máy chủ đã biết." được hiển thị. và sau đó nó có vẻ hoạt động
Wolfgang Fahl

13
Bạn có thể cập nhật khóa thay vì loại bỏ nó. Sử dụng ssh-keyscan -t ecdsa my.server.domain >> ~/.ssh/known_hostssau đó bạn không cần xác nhận khóa mới lúc đầu kết nối với máy chủ.
Alex

2
Đối với những người không thành công để làm cho nó hoạt động: Tôi đã đăng ký nhiều lần xuất hiện của cùng một IP: 1 / địa chỉ IP đã nói (xx.xx.xx.xx), tên miền (tomsihap.fr), máy chủ vps được cung cấp địa chỉ (vpsxxx.ovh.net). ssh-keygen -R cho mỗi trong số này đã làm việc.
tomsihap

Làm việc cho tôi, nhưng sự nhầm lẫn có thể là từ lệnh nào nên chạy lệnh này? Câu trả lời là từ một lỗi thể hiện lỗi. Câu hỏi và câu trả lời thứ hai rõ ràng hơn, nhưng chỉ trong trường hợp: địa chỉ nào để chuyển đến ssh-keygen -R? Địa chỉ mà số liệu trong báo cáo lỗi.
Russ BHRan

63

Trong trường hợp của tôi ssh-keygen -R ...đã không sửa cảnh báo. Tôi đã có thêm thông tin như thế này:

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

Tôi chỉ cần chỉnh sửa thủ công ~/.ssh/known_hostsvà xóa dòng 8 ("khóa vi phạm"). Tôi đã thử kết nối lại, máy chủ đã được thêm vĩnh viễn và mọi thứ đều ổn sau đó!


2
Hoạt động như một lá bùa. Có thể sửa lỗi này trong một dòng bằng sed -e '8d' /home/myuser/.ssh/known_hosts, thay thế số dòng 8và tên tệp bằng những dòng được hiển thị trên hệ thống của bạn.
Alex P. Miller

Vấn đề của tôi với cách tiếp cận này là hơi khó hiểu nếu known_hosts:8đề cập đến giá trị không có chỉ số hay không. Thật tốt khi biết rằng đó là bản đồ 1: 1 ...
Daniel F

Tôi nhận thấy điều này xảy ra nếu bạn sử dụng một cổng không chuẩn như năm 2022. Trong trường hợp đó, bạn cần phải làmssh-keygen -R [hostname]:2022
Alexander Malfait

19

Tôi thực hiện nhiều thao tác giữa các máy tính LAN và hai tài khoản lưu trữ web của mình, vì vậy tôi đã sắp xếp tất cả các loại tỷ lệ cược và kết thúc bằng SSH, bao gồm các vấn đề xác thực bằng cách sử dụng ssh -vđể xem lỗi và sai ở đâu.

Vừa giải quyết vấn đề này vừa không hài lòng với câu trả lời, tôi muốn thực sự biết "tại sao" bản thân mình ...

Kích hoạt cho trường hợp của tôi là: đã cài đặt HĐH máy chủ mới tại nơi làm việc và khi cài đặt gói máy chủ openssh, một bộ khóa máy chủ mới đã được tạo trên máy chủ của công việc. Trước đây, tất cả các hệ điều hành máy chủ của tôi là Ubuntu và lần này nó đã đổi thành Debian (và tôi nghi ngờ có sự khác biệt về sắc thái về quyền).

Khi tất cả các HĐH là Ubuntu và tôi cài đặt lại HĐH của máy chủ, khi SSH đầu tiên vào đó, tôi nhận được loại cảnh báo này, tôi thích cảnh báo im lặng hơn ở trên!

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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.

Sau đó, tôi mở ~/.ssh/known_hostsmáy tính khởi tạo ssh, xóa dòng đó, kết nối lại và điều này xảy ra:

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

Đó là một chút về: 11122 là số cổng tôi định tuyến SSH từ trên tường lửa

Tôi đã kiểm tra các bản sao lưu từ máy chủ Ubuntu cũ và khác với bản cài đặt Debian mới của tôi:

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

Vì vậy, có khả năng, máy chủ bắt đầu sử dụng các khóa ecdsa gần đây, dựa trên những thay đổi của Ubuntu gần đây, tôi sẽ đổ lỗi cho một bản cập nhật. Sự thay đổi của Ubuntu khỏi hệ điều hành linux cứng như đá mà tôi đã tính đến là lý do tại sao tôi cài đặt Debian lần này.

Tôi đã đọc một bảo mật.SE q / a trên ecdsa và đã xóa dòng đó khỏi sshd_configmáy chủ Debian mới của tôi. (và đã chạy service ssh restart)


2
+1 cho khối so sánh cạnh nhau đẹp. Bạn có thể thêm một URL làm rõ "sự thay đổi của Ubuntu khỏi hệ điều hành linux solid-rock" không?
bgoodr

@bgoodr đó là ý kiến ​​của tôi & chỉ dựa trên việc thiết lập máy chủ RAID của riêng tôi vài lần trong vài năm qua. : / Crap để trả lời, nhưng bắt đầu googling ubuntu debian servervà bạn sẽ thấy những gì tôi muốn nói.
Chris K

1
@ChrisK Bạn, thưa ông, là một ông chủ. Cảm ơn cho câu trả lời chi tiết, nhưng súc tích.
sargas

6

Lời nhắc xảy ra mỗi lần vì các địa chỉ IP thay đổi liên tục khi sử dụng địa chỉ động. Cố gắng sử dụng IP tĩnh để bạn chỉ phải thêm khóa một lần.


1
Điểm tốt, tôi đã bỏ lỡ nơi ai đó đề cập đến ips năng động?
Chris K

6

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

Điều này sẽ thay thế các khóa hiện có trong know_hosts.old và tạo một khóa mới. Giải pháp này hiệu quả với tôi trong cùng một kịch bản


3

Tôi đã thêm các dòng sau vào ~ / .ssh / config, do đó vô hiệu hóa việc kiểm tra máy chủ nghiêm ngặt đối với tất cả các địa chỉ .local. (với phân bổ địa chỉ DHCP, địa chỉ IP của các máy cục bộ của tôi luôn thay đổi)

host *.local
    StrictHostKeyChecking no

Bạn vẫn nhận được cảnh báo, mặc dù, đó là tốt của tôi.


2

Bạn đang sử dụng cùng một người dùng để kết nối?

Nếu bạn đã đăng nhập vào PC cục bộ như người dùng John và được kết nối với máy chủ B như người dùng Adolf @ B và mọi thứ đều ổn, điều đó không có nghĩa là mọi thứ đều ổn nếu bạn đăng nhập vào PC cục bộ như người dùng Jane và kết nối với máy chủ B như dùng Adolf @ B .

Nếu bạn muốn đăng nhập vào máy chủ B với tư cách là người dùng Beda từ PC A mà không cần mật khẩu, hãy thử lệnh này, tất cả từ PC A :

ssh-keygen -t rsa

Lệnh này tạo khóa và lưu trữ khóa trong tệp. Vui lòng để trống cụm mật khẩu .

ssh Beda@B mkdir -p .ssh

Lệnh này tạo thư mục, nếu chúng chưa tồn tại. Nếu không, không in một thông báo lỗi.

cd ~/.ssh

Lệnh này thay đổi thư mục vào thư mục nhà người dùng của bạn ./ssh.

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

Lệnh này in tệp id_rsa.pub (khóa chung của bạn) thành ủy quyền trên máy chủ.

QUAN TRỌNG: Beda là tên người dùng của bạn trên máy chủ mà bạn đang kết nối, B là IP máy chủ của bạn.

Bây giờ, bạn có thể kết nối với máy chủ B mà không cần mật khẩu hoặc mật khẩu:

ssh Beda@B

1
Hoặc chỉ sử dụng ssh-copy-id để điền vào tệp ủy quyền bằng khóa id_rsa.pub của bạn mà không gặp rắc rối thêm.
BlakBat

1

Các chủ đề ở đây có thể giúp đỡ.

Về cơ bản, bạn muốn xóa cả khóa RSA và ECDSA cho máy chủ đó, sau đó sử dụng ssh-keyscanđể đưa chúng trở lại known_hoststệp của bạn theo cách không gây ra xung đột này. Nó làm việc cho tôi khi tôi có cùng một vấn đề.


1

Câu hỏi: Điều gì gây ra điều này, ...?

Vì vậy, khóa máy chủ ssh đã thay đổi. Điều gì gây ra sự thay đổi? Thật khó để nói. Dưới đây là một số dự đoán:

  • Có phải sshd trên myserver đã bắt đầu sử dụng các khóa ECDSA, vì vậy đây là loại khóa mới?
  • Có phải myserver gần đây đã được cài đặt lại?
  • Có phải sshd trên myserver gần đây đã bị khóa lại nên một khóa máy chủ ssh mới đã được tạo không?
  • Có ai đó tạo lại hoặc thay thế khóa máy chủ sshd?
  • Địa chỉ IP của myserver có thay đổi để một máy chủ khác đang trả lời địa chỉ IP đó không?

Câu hỏi: ... và làm cách nào để khắc phục nó?

Như những người khác đã trả lời, hãy xóa khóa máy chủ ECDSA được lưu trong bộ nhớ cache cho myserver mà tài khoản của bạn đã được lưu.


2
Lời khuyên tốt, nhưng không thực sự trả lời câu hỏi. Thậm chí không TRY để trả lời câu hỏi.
thuyền viên

1

Lỗi này khiến tôi khó chịu trong một thời gian dài. Vì một số lý do, nó đã tạo ra sự khác biệt cho dù tôi có làm

ssh host

hoặc là

ssh host.domain

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

sau đó chỉ cho tôi tùy chọn thay đổi tập tin cấu hình. Xem tập lệnh của tôi https://askubfox.com/a/949731/129227 ở đó để tự động hóa quy trình.


1
Sử dụng các giá trị cấu hình CanonicalizeHostnameCanonicalDomainssẽ tránh loại bỏ kiểm tra nghiêm ngặt và sẽ khiến ssh coi host và host.domain giống nhau.
BlakBat

0

Tôi đã sửa lỗi này trên Chromebook bằng cách gỡ cài đặt và cài đặt lại Secure Shell ... Nó hoạt động như một bùa mê.


Đây là quá mức cần thiết. Xem một giải pháp đơn giản hơn trong câu trả lời của tôi ở đây.
Alex Yursha

0

Dưới đây là cách xóa dấu vân tay máy chủ đã biết (khỏi known_hoststệp) trên Chrome OS:

Tìm chỉ mục của mục nhập máy chủ vi phạm trong đầu ra ssh khi kết nối không thành công. Ví dụ trong dòng bên dưới chỉ số vi phạm là 7 :

Offending ECDSA key in /.ssh/known_hosts:7

Mở bảng điều khiển JavaScript ( CTRL+ Shift+ J) của cửa sổ Secure Shell và nhập thông tin sau, thay thế INDEXbằng giá trị phù hợp (ví dụ 7 ):

term_.command.removeKnownHostByIndex(INDEX);

Giải pháp này được mượn từ Blog của Leo Gaggl .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.