ssh nhận dạng máy chủ từ xa đã thay đổi


619

Tôi đã cài đặt lại máy chủ của mình và tôi nhận được những tin nhắn này:

[user@hostname ~]$ ssh root@pong
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    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 a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
6e:45:f9:a8:af:38:3d:a1:a5:c7:76:1d:02:f8:77:00.
Please contact your system administrator.
Add correct host key in /home/hostname /.ssh/known_hosts to get rid of this message.
Offending RSA key in /var/lib/sss/pubconf/known_hosts:4
RSA host key for pong has changed and you have requested strict checking.
Host key verification failed.

Tôi đã thử các giải pháp khác nhau mà tôi tìm thấy trên Internet. known_hostsTập tin của tôi (thường là trong ~/.ssh/known_hosts) là trong /var/lib/sss/pubconf/known_hosts. Tôi đã cố gắng chỉnh sửa nó, nhưng nó vẫn ở một trạng thái. Tôi đã cài đặt ipa-client và có Fedora 19. Làm cách nào để giải quyết cảnh báo này?

Tất cả các câu trả lời cho đến nay chỉ hoạt động nếu bạn chưa cài đặt Freeipa.

Câu trả lời đúng cho freeipa trong các bình luận dưới đây từ adrin là ở đây .


1
chỉ cần phát hiện ra một cách khó khăn là vấn đề này cũng có thể xảy ra nếu bạn có xung đột địa chỉ ip nslookup ip của bạn để gỡ lỗi vấn đề này nhiều hơn
sharrajesh

1
Có một bế tắc ở đây. Câu hỏi này được đánh dấu trùng lặp để không ai có thể thêm câu trả lời và câu hỏi mà nó liên kết được đánh dấu ngoài chủ đề để không thể thêm câu trả lời vào đó. Nếu bạn xóa các know_host, nó cũng sẽ khắc phục vấn đề.
zar

1
Tôi đã từng gặp vấn đề tương tự. Vì lợi ích của tôi và những người khác, đây là câu hỏi và câu trả lời của tôi cho nó: superuser.com/questions/1071204/ đá
adrin

3
Khi ai đó tìm cách xác minh khóa của họ trước tiên, tôi thấy câu trả lời này hữu ích. Askubfox.com/a/83499/620623
Declan McKenna

Như sharrajesh đề cập: kiểm tra các mục DNS của bạn (trong FreeIPA cho tôi) và thấy bạn không có nhiều mục A với IP không thể truy cập được từ mạng.
th3penguinwhisperer

Câu trả lời:


1071

Đây là giải pháp đơn giản nhất

ssh-keygen -R <host>

Ví dụ,

ssh-keygen -R 192.168.3.10

Từ ssh-keygentrang nam :

  • -R hostnameXóa tất cả các khóa thuộc về tên máy chủ khỏi tệp đã biết. Tùy chọn này hữu ích để xóa các máy chủ băm (xem tùy chọn -H ở trên).

Tôi đang dùng Windows và giải pháp này, cũng không gỡ bỏ khóa, hoạt động, tôi có thể thử cái gì khác?
jaycode

5
Được rồi, hóa ra trên Windows Tôi cần sử dụng thiết bị đầu cuối từ git bash cho cái này (hoặc bất kỳ thiết bị đầu cuối MingW32 nào). Khó khăn.
jaycode

25
Hãy nhớ rằng nếu bạn kết nối qua một cổng cụ thể, bạn có thể phải xóa bằng cú pháp như ssh-keygen -R [127.0.0.1]:3022. Chỉ cần kiểm tra tệp .ssh / know_hosts của bạn để biết những gì nó nói rõ ràng.
Adam Johns

4
Khi tôi thử điều này, tôi gặp lỗi "<tên máy chủ> không tìm thấy trong ~ / .ssh /
know_hosts

3
Tại sao cảnh báo này xảy ra?
Vilas Joshi

199

Sử dụng

ssh-keygen -R [hostname]

Ví dụ với địa chỉ IP / tên máy chủ sẽ là:

ssh-keygen -R 168.9.9.2

Điều này sẽ cập nhật sự vi phạm của máy chủ của bạn từ các know_hosts. Bạn cũng có thể cung cấp đường dẫn của know_hosts với cờ -f.


1
Xóa khóa tương ứng $ ssh-keygen -R {server.name.com}| $ ssh-keygen -R {ssh.server.ip.address}| $ ssh-keygen -R server.example.com
DaddyMoe

5
Làm thế nào để một câu trả lời mà không có lời giải thích nhận được rất nhiều sự ủng hộ .. không có mối quan tâm bảo mật, không có lời giải thích .... -1
Daniel W.

4
Nó cũng có vẻ giống như một bản sao của câu trả lời khác dưới đây. Xin một mod dọn dẹp mớ hỗn độn này ...
Daniel W.

115

Tôi đã có lỗi tương tự xảy ra sau khi tôi tạo lại hình ảnh Digital Ocean Ubuntu. Tôi đã sử dụng lệnh sau với IP máy chủ của mình thay cho[IP_ADDRESS]

ssh-keygen -R [IP_ADDRESS]

Cảm ơn bạn rất nhiều! Tôi đã sử dụng tên máy chủ và nó chỉ hoạt động với IP_ADDRESS :)
J. Lopes

1
Điều này đã làm điều đó cho tôi và nên là câu trả lời được chấp nhận. Tôi không biết tại sao có hai bản sao của câu trả lời này xuất hiện sau đó và cả hai đều có nhiều thông tin hơn.
Wylliam Judd

Của bạn không phải là cùng một lỗi; máy chủ của bạn không chạy SSSD. Xem OP.
Mercury00

39

Khi bạn cài đặt lại máy chủ, danh tính của nó sẽ thay đổi và bạn sẽ bắt đầu nhận được thông báo này. Ssh không có cách nào để biết liệu bạn đã thay đổi máy chủ mà nó kết nối hay máy chủ trung gian đã được thêm vào mạng của bạn để đánh hơi tất cả các thông tin liên lạc của bạn - vì vậy nó sẽ khiến bạn chú ý.

Chỉ cần xóa khóa khỏi know_hosts bằng cách xóa mục liên quan:

sed '4d' -i /var/lib/sss/pubconf/known_hosts

Các 4dlà trên tài khoản củaOffending RSA ...known_hosts:4


1
Cảm ơn, nhưng tôi không biết tại sao, nhưng tôi loại bỏ nó và nó lại ở trong đó. Tôi đã thử dừng dịch vụ sssd và hiệu ứng này không còn nữa, nhưng sau khi bắt đầu sssd, nó lại xuất hiện.
Filip Dobrovolný

Sao lưu thư mục ~ / .ssh của bạn và sau đó xóa nó. Dịch vụ của bạn có tiếp tục thêm lại các khóa sau khi ~ / .ssh bị thổi bay không?
mockinterface 30/12/13

Tôi đã đổi tên .ssh thành .ssh_old, sau khi thử kết nối mới, chỉ cần tạo thư mục trống .ssh. Và tôi vẫn không thể làm cho / var / lib / sss / pubconf / know_hosts "có thể chỉnh sửa".
Filip Dobrovolný

4
Cách dễ dàng hơn để làm điều này: sed -i -e 4d /var/lib/sss/pubconf/known_hosts
Pierz 11/215

2
Làm thế nào để bạn sao lưu máy chủ identificationtrong trường hợp bạn muốn xây dựng lại máy chủ mà không gây ra sự gián đoạn như thông báo lỗi này?
Ninjaxor

38

Chiếc búa tạ là để loại bỏ mọi vật chủ đã biết trong một cú trượt ngã:

rm ~/.ssh/known_hosts

Tôi nghĩ ra điều này khi chúng tôi sử dụng các mạng con nhỏ của các máy chủ có thời gian sử dụng ngắn từ hộp nhảy và thường xuyên sử dụng lại địa chỉ IP nội bộ của các máy chủ có chung khóa ssh.


Làm việc cho tôi trên một VM mơ hồ khi câu trả lời được chấp nhận không hoạt động.
100pic

1
Công cụ hữu ích cần có trong vành đai, nhưng điều này có thể mở ra cho bạn một cuộc tấn công MitM (điều chính xác known_hostscó nghĩa là ngăn chặn). Chỉ làm điều này nếu bạn tự tin rằng tất cả các máy chủ lưu trữ trong đó đều an toàn.
Freedom_Ben

26

Vấn đề là trước đây bạn đã chấp nhận kết nối SSH với máy tính từ xa và dấu vân tay kỹ thuật số hoặc mã băm SHA256 của máy tính từ xa đó đã thay đổi kể từ lần cuối bạn kết nối. Do đó, khi bạn cố gắng SSH lại hoặc sử dụng github để kéo mã, cũng sử dụng SSH, bạn sẽ gặp lỗi. Tại sao? Bởi vì bạn đang sử dụng cùng một địa chỉ máy tính từ xa như trước đây nhưng máy tính từ xa đang phản hồi bằng một dấu vân tay khác. Do đó, có thể ai đó đang giả mạo máy tính mà bạn đã kết nối trước đó. Đây là một vấn đề bảo mật.

Nếu bạn chắc chắn 100% rằng máy tính từ xa không bị xâm nhập, bị hack, bị giả mạo, v.v. thì tất cả những gì bạn cần làm là xóa mục nhập trong tệp know_hosts của bạn cho máy tính từ xa. Điều đó sẽ giải quyết vấn đề vì sẽ không còn sự không phù hợp với ID vân tay SHA256 khi kết nối.

Trên Mac đây là những gì tôi đã làm:

1) Tìm dòng đầu ra đọc RSA host key for servername:port has changed and you have requested strict checking.Bạn sẽ cần cả tên máy chủ và cổng có khả năng từ đầu ra nhật ký đó.

2) Sao lưu tệp máy chủ SSH đã biết cp /Users/yourmacusername/.ssh/known_hosts /Users/yourmacusername/.ssh/known_hosts.bak

3) Tìm dòng nơi lưu trữ dấu vân tay cũ của máy tính và xóa nó. Bạn có thể tìm kiếm dấu vân tay máy tính từ xa vi phạm cụ thể bằng cách sử dụng tên máy chủ và cổng từ bước # 1.nano /Users/yourmacusername/.ssh/known_hosts

4) CTRL-X để thoát và chọn Y để lưu các thay đổi

Bây giờ hãy nhập ssh -p port servernamevà bạn sẽ nhận được lời nhắc ban đầu bạn đã làm khi lần đầu tiên thử SSH vào máy tính đó. Sau đó, bạn sẽ được cung cấp tùy chọn lưu dấu vân tay SHA256 đã cập nhật của máy tính đó vào tệp know_hosts của bạn. Nếu bạn đang sử dụng SSH qua cổng 22 thì đối số -p là không cần thiết.

Bất kỳ vấn đề nào bạn có thể khôi phục tệp know_hosts ban đầu: cp /Users/yourmacusername/.ssh/known_hosts.bak /Users/yourmacusername/.ssh/known_hosts


3
Điều đó nên được đánh dấu là câu trả lời được chấp nhận. Theo các bước đó đã khắc phục vấn đề của tôi trong khi ssh-keygen -R [IP_ADDRESS]không làm việc cho tôi. Cảm ơn!
Yusuf Kamil AK

Vâng, một trong những trường hợp đó là không công bằng, chắc chắn câu trả lời tốt nhất. Câu trả lời thứ 2 và thứ 3 chỉ cần lặp lại những gì người thứ 1 nói và tất cả chúng đều có một giải pháp chưa hoàn chỉnh.
brasofilo

16

Như nhiều người đã nói, sử dụng ssh-keygen, tức là

ssh-keygen -R pong

Ngoài ra, bạn có thể muốn xem xét tạm thời tắt kiểm tra khóa máy chủ:

ssh -oStrictHostKeyChecking=no root@pong

những gì tôi đang sử dụng cho .ssh / config : Host ???? CheckHostIP no StrictHostKeyChecking no(3 dòng, lập bảng bắt đầu từ thứ 2)
XXL

15

Làm việc cho tôi!

Lỗi: Vi phạm khóa RSA trong / var / lib / sss / pubconf / know_hosts: 4

Điều này cho thấy bạn có khóa RSA vi phạm ở dòng số. 4

Giải pháp 1 :

1. vi /var/lib/sss/pubconf/known_hosts

2 remove line no: 4 ..

3 Save and Exit, and Retry ..

Giải pháp 2:

ssh-keygen -R "you server hostname or ip"

HOẶC LÀ

Giải pháp 3:

sed -i '4d' /root/.ssh/known_hosts

Điều này sẽ loại bỏ 4thdòng /root/.ssh/known_hoststại chỗ ( -i).


1
Điều này hoạt động cho tập tin .ssh know_hosts của root. Không dành cho / var / lib / sss / pubconf / know_hosts, đây là một tệp được quản lý bởi SSSD và được một máy chủ từ xa cư trú.
Mercury00

1
trong trường hợp của tôi, vì một số lý do, sự cố đã xảy ra trên know_hosts * 2 *. Thực hiện theo các bước này đã giúp tôi tìm ra điều đó, cảm ơn @Sahil Gulati!
Lucas

11

Tôi đã sử dụng giải pháp của mockinterface, mặc dù sed -i không hoạt động nhiều nhưng tôi đã giải quyết nó bằng cách xóa dòng bằng tay với vim:

sudo vim /var/lib/sss/pubconf/known_hosts

Bạn có thể sử dụng bất kỳ trình soạn thảo văn bản nào khác mà bạn muốn, nhưng có lẽ bạn sẽ cần thể hiện các đặc quyền quản trị của mình


1
Có, xóa bản ghi của cùng một IP trong tệp know_hosts sẽ giải quyết vấn đề.
tạm biệt

Mục nhập được SSSD tạo lại ngay lập tức khi cố gắng ssh một lần nữa. lưu ý rằng sss pubconf know_hosts là một tệp được quản lý, không phải một số kho lưu trữ cục bộ được máy chủ cục bộ cư trú.
Mercury00

9

Đối với người dùng Mac, bạn có thể sử dụng -Rcờ của ssh-keygenlệnh. Ví dụ nhanh:

ssh-keygen -R THE_IP_ADDRESS

THE_IP_ADDRESSlà IP bạn đang cố gắng để ssh vào. Và sau đó bạn có thể kết nối tốt.


8

Điều này là do cài đặt máy tính từ xa của bạn đã thay đổi. Hủy bỏ các khóa hiện tại của bạn cho điều đó.

vim /root/.ssh/known_hosts

Xóa dòng IP bạn đang kết nối.


7

Chỉnh sửa /home/hostname /.ssh/known_hostsvà xóa 4 dòng và lưu nó.

Sau đó chạy ssh root@ponglại, bạn sẽ thấy thông báo như thế này : Are you sure you want to continue connecting (yes/no)? yes, chỉ cần in yes.

Lưu ý: Nếu bạn gặp một số vấn đề, hãy đọc các gợi ý trước, nó sẽ giúp ích.


Câu trả lời tốt nhất thực sự giải thích những gì đang xảy ra.
Prometheus

6

Các câu trả lời khác ở đây là tốt và làm việc, dù sao, tôi đã giải quyết vấn đề bằng cách xóa ~/.ssh/known_hosts. Điều này chắc chắn giải quyết vấn đề, nhưng có lẽ nó không phải là cách tiếp cận tốt nhất.


6

Trong trường hợp của tôi, điều đó đã xảy ra vì trước đây tôi có kết nối ssh với một máy có cùng ip (giả sử 192.152.51.10) và hệ thống đang xem xét khóa RSA (được lưu trữ trong /home/user_name/.ssh/ Unknown_hosts) của máy chủ trước đó. không phù hợp

Để giải quyết vấn đề này, bạn phải xóa khóa RSA được lưu trữ trước đó cho ip 192.152.51.10 .

ssh-keygen -f "/home/user_name/.ssh/known_hosts" -R 192.152.51.10

5

Giải pháp một lớp lót đơn giản, đã thử nghiệm trên mac:

sed '/212.156.48.110/d' ~/.ssh/known_hosts > ~/.ssh/known_hosts

Chỉ xóa IP máy chủ ssh đích khỏi các máy chủ biết.

trong đó 212.156.48.110 được thay thế bằng địa chỉ IP máy chủ đích.

Nguyên nhân : Đã xảy ra do IP mục tiêu đã được biết đến với một máy khác do chuyển tiếp cổng. Xóa IP đích trước khi kết nối sẽ khắc phục sự cố.


4

Sử dụng lệnh này:

truncate -s 0 /home/SYSTEM_NAME/.ssh/known_hosts

Vui lòng thêm một lời giải thích những gì lệnh làm và những gì nó không.
Daniel W.

6
Tại sao bạn muốn cắt bớt tập tin? Bạn mất tất cả thông tin, ngay cả thông tin bạn đã xác minh. Đây là một phương pháp tồi để hành động chống lại một khóa máy chủ công cộng đã thay đổi.
Daniel W.

1
Đây là một bản hack hoàn toàn: D nhưng nó hoạt động: D
Benjamin

Gợi ý: Điều này cũng xóa tất cả các thông tin máy chủ khác. Nếu bạn đang chạy các tập lệnh tự động từ máy của mình (như triển khai), chúng có thể bị hỏng do bạn phải xác nhận lại tất cả các khóa máy chủ theo cách thủ công. Chỉ cần đưa ra một cảnh báo cho những người dùng khác ở đây, những người mong muốn sử dụng giải pháp đơn giản nhất.
Mateng

3

Xóa mục nhập đó khỏi know_hosts bằng cách sử dụng:

ssh-keygen -R *ip_address_or_hostname*

Điều này sẽ xóa IP hoặc tên máy chủ có vấn đề khỏi tệp know_hosts và thử kết nối lại.

Từ trang người đàn ông:

-R hostname
Xóa tất cả các khóa thuộc về tên máy chủ khỏi tệp đã biết. Tùy chọn này hữu ích để xóa các máy chủ băm (xem tùy chọn -H ở trên).


3

Cứ làm đi:

cd /home/user/.ssh/-> ở đây usersẽ là tên người dùng của bạn, ví /home/jon/dụ như.

Sau đó

gedit known_hosts & và xóa nội dung bên trong nó.

Bây giờ sshmột lần nữa, nó sẽ làm việc.


3

Nếu bạn đang cố gắng kết nối với bộ chứa docker đang chạy trên cổng 2222 bằng lệnh và bạn gặp lỗi

mian@tdowrick2~$ ssh pos@localhost -p 2222

Sau đó, để giải quyết vấn đề này, trên máy tính cục bộ của bạn (tức là máy chủ không chứa), hãy đến cd ~/.ssh/và mở known_hoststệp bằng trình soạn thảo văn bản. Xóa dòng bắt đầu bằng [localhost]:2222và lưu tệp. Bây giờ hãy thử ssh một lần nữa

mian@tdowrick2~$ ssh pos@localhost -p 2222

Lỗi sẽ biến mất nhưng bạn phải làm điều đó mỗi lần container khởi động lại.


2

Giải pháp của tôi là:

  1. vi ~/.ssh/known_hosts
  2. xóa dòng có chứa ip muốn kết nối của bạn.

Điều này tốt hơn là xóa tất cả known_hosts


Đây là câu trả lời tương tự như miota85 dưới đây.
Daniel W.

2

Chỉ có vấn đề phía máy khách (khóa trùng lặp cho ip):

Giải quyết các biến thể:

Để xóa một ip (cổng mặc định 22):

ssh-keygen -f -R 7.7.7.7

Đối với một ip ( cổng không mặc định ):

ssh-keygen -f -R 7.7.7.7:333

Nhanh chóng xóa tất cả các ips:

cd ~; rm .ssh/known_hosts

7.7.7.7 - ssh kết nối ip máy chủ của bạn

333 - cổng không nổi bật


2

Đôi khi, nếu vì bất kỳ lý do gì, bạn cần cài đặt lại máy chủ, khi kết nối bằng ssh, chúng tôi sẽ thấy rằng máy chủ của bạn nói rằng nhận dạng đã thay đổi. Nếu chúng tôi biết rằng đó không phải là một cuộc tấn công , nhưng chúng tôi đã khôi phục hệ thống, chúng tôi có thể xóa nhận dạng cũ khỏi các know_host bằng ssh-keygen:

ssh-keygen -R <host/ip:hostname>
root/.ssh/known_hosts updated.
Original contents retained as /root/.ssh/known_hosts.old

Khi kết nối lại, chúng tôi sẽ yêu cầu bạn xác thực dấu vân tay mới:

ssh -l user <host/ip:hostname>
The authenticity of host '<host/ip:hostname>' can't 
be established.
RSA key fingerprint is 3f:3d:a0:bb:59:24:35:6d:e5:a0:1a:3f:9c:86:81:90.
Are you sure you want to continue connecting (yes/no)? yes

1

Tôi đã có vấn đề này, và lý do rất đơn giản, tôi có một địa chỉ IP trùng lặp để đăng nhập ssh, vì vậy sau khi sửa đổi vấn đề này, mọi thứ đều được giải quyết.


1

Tôi đã có cùng một lỗi trong máy của tôi và tôi xóa known_hoststệp, và sau đó, nó hoạt động tốt.


1
Bạn không muốn xóa tệp của mình authorized_keyskhi gặp sự cố với known_hoststệp
jeb

0

GIẢI PHÁP:

1- xóa khỏi "$ HOME / .ssh / know_hosts" dòng liên quan đến máy chủ không thể kết nối.

2- thực hiện lệnh này: ssh-keygen -R "IP_ADDRESSorHOSTNAME" (thay thế "IP_ADDRESSorHOSTNAME" bằng ip đích hoặc tên máy chủ đích của bạn)

3- Thử lại kết nối ssh (nếu không thành công, vui lòng kiểm tra quyền trên thư mục .ssh, nó phải là 700)


0

Giải pháp của tôi trên UBUNTU (linux):

1.Bạn phải xóa nội dung khỏi tệp "know_hosts" trong "/home/YOUR_USERNAME/.ssh/ Unknown_hosts"

2.Tạo một khóa ssh mới như "ssh-keygen -t rsa -C" your.email@example.com "-b 4096"

3. Sao chép-dán khóa ssh mới của bạn vào kho git của bạn (gitlab trong trường hợp của tôi) Các khóa SSH.

Nó làm việc cho tôi!


-1

AWS EC2.

Tìm ip trong tin nhắn nó cung cấp cho bạn.

chạy

vim /home/ec2-user/.ssh/known_hosts

Sử dụng các phím mũi tên để tìm ip từ tin nhắn và nhấp.

dd

Điều này sẽ xóa dòng đó sau đó chạy thoát

:wp

Điều này sẽ tiết kiệm sau đó bạn tốt để đi.

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.