Làm cách nào để xóa kiểm tra khóa RSA nghiêm ngặt trong SSH và vấn đề ở đây là gì?


42

Tôi có một máy chủ Linux mà bất cứ khi nào tôi kết nối, nó sẽ hiển thị cho tôi thông báo đã thay đổi khóa máy chủ SSH:

$ ssh root @ host1 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@ @ CẢNH BÁO: TỪ XÁC NHẬN XÁC NHẬN HOST ĐÃ THAY ĐỔI! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ NÓ LÀ KHẢ NĂNG RẤT NHIỀU NGƯỜI ĐANG LÀM NỮA! Ai đó có thể đang nghe lén bạn ngay bây giờ (cuộc tấn công giữa chừng)! Cũng có thể khóa máy chủ RSA vừa được thay đổi. Dấu vân tay cho khóa RSA được gửi bởi máy chủ từ xa là 93: a2: 1b: 1c: 5f: 3e: 68: 47: bf: 79: 56: 52: f0: ec: 03: 6b. Xin vui lòng liên hệ với quản trị hệ thống của bạn. Thêm khóa máy chủ chính xác trong /home/emerson/.ssh/ Unknown_hosts để thoát khỏi thông báo này. Khóa vi phạm trong /home/emerson/.ssh/ Unknown_hosts:377

Khóa máy chủ RSA cho host1 đã thay đổi và bạn đã yêu cầu kiểm tra nghiêm ngặt. Xác minh khóa máy chủ không thành công.

Nó giữ cho tôi trong một vài giây đăng nhập và sau đó nó đóng kết nối.

host1: ~ / .ssh # Đọc từ máy chủ lưu trữ từ xa1: Thiết lập lại kết nối bằng ngang hàng Kết nối với host1 đã đóng.

Có ai biết chuyện gì đang xảy ra và tôi có thể làm gì để giải quyết vấn đề này không?


1
Câu hỏi này bị lừa trước đó: serverfault.com/questions/2988/ Mạnh
Drew Stephens

Câu trả lời:


68

Vui lòng không xóa toàn bộ tệp know_hosts theo khuyến nghị của một số người, điều này hoàn toàn nói lên quan điểm cảnh báo. Đây là một tính năng bảo mật để cảnh báo bạn rằng một người đàn ông trong cuộc tấn công giữa có thể đã xảy ra.

Tôi đề nghị bạn xác định lý do tại sao nó nghĩ rằng một cái gì đó đã thay đổi, rất có thể là một bản nâng cấp SSH đã thay đổi các khóa mã hóa do lỗ hổng bảo mật có thể xảy ra. Sau đó, bạn có thể lọc dòng cụ thể đó khỏi tệp know_hosts của mình:

sed -i 377d ~/.ssh/known_hosts

Điều này d eletes dòng 377 như được hiển thị sau dấu hai chấm trong cảnh báo:

/home/emerson/.ssh/ Unknown_hosts :377

Ngoài ra, bạn có thể loại bỏ khóa có liên quan bằng cách làm như sau

ssh-keygen -R 127.0.0.1 (obviously replace with the server's IP)

Vui lòng KHÔNG lọc toàn bộ tệp và đảm bảo đây thực sự là máy bạn muốn kết nối trước khi xóa khóa cụ thể.


Sẽ không xóa hơn 350 máy chủ vì một khóa không khớp. Bất cứ ý tưởng tại sao nó tiếp tục đóng kết nối?
setatakahashi

Có phải nó không được giải quyết khi bạn xóa bản ghi đã biết có liên quan không? Nếu không, bạn có thể chạy ứng dụng khách ssh ở chế độ dài dòng và dán nó ở đâu đó không.
Adam Gibbins

1
Nó đóng máy vì khóa máy chủ không hợp lệ, giống như nó nói. Nếu bạn nghiêm túc về bảo mật, bạn cần kiểm tra với quản trị viên của máy chủ để đảm bảo khóa máy chủ thay đổi vì một lý do chính đáng. Nếu vậy, bạn có thể thay thế nó, như được giải thích bởi Adam.
Matthew Flaschen

Tôi đã làm theo đề xuất của bạn nhưng $ sed -i "46 d" ~ / .ssh / famous_hosts sed: 1: "/Users/myusr/.ssh ...": các ký tự phụ ở cuối lệnh l nên tôi đã xóa nó bằng tay vim và nó đã làm việc Thanx!
Luis Ramirez-Monterosa

3
Cú pháp của Adam gần như đúng, nhưng bạn cần một khoảng trắng giữa "377" và "d". Ngoài ra, trong OS X, các máy chủ đã biết được đặt trong ~ / .ssh / unknown_hosts; lưu ý thiếu "." trong tên tệp.
ktappe

27

Tôi nghĩ mặc dù một số câu trả lời ở đây đề cập đến quá trình hành động được đề xuất trong câu hỏi của OP, nhưng nó không trả lời đầy đủ câu hỏi.

Câu hỏi nêu rõ "Làm cách nào để xóa kiểm tra khóa RSA nghiêm ngặt trong SSH và vấn đề ở đây là gì?"

Vấn đề ở đây là, theo lời khuyên của một số người khác, một sự thay đổi trong máy chủ có thể là do cài đặt lại máy chủ (kịch bản phổ biến nhất). Và giải pháp được đề xuất thực sự là loại bỏ khóa vi phạm khỏi tệp .ssh / ủy quyền bằng một sed sed nội tuyến.

Tuy nhiên tôi không thấy bất kỳ câu trả lời nào đề cập đến phần cụ thể của câu hỏi " Cách xóa kiểm tra khóa RSA nghiêm ngặt trong SSH ".

Bạn có thể xóa kiểm tra StricthostKey trong tệp cấu hình ssh của bạn, thường được lưu trữ tại ~/.ssh/config.

Một ví dụ Khối máy chủ được cung cấp dưới đây:

Host 101
  HostName yourip|hostname
  User youruserid
  IdentityFile /path/to/keyfile
  Port 22
  StrictHostKeyChecking no

Dòng được thêm cụ thể là dòng cuối cùng StrictHostKeyChecking nothực hiện những gì. Tùy thuộc vào kịch bản cụ thể của bạn, điều này có thể hữu ích cho bạn, chẳng hạn như chạy nhiều thùng chứa ảo hóa trên một máy chủ chuyên dụng, chỉ trên một vài ips, dừng và bắt đầu một phiên bản khác trên cùng một ip.


3
+1 Bởi vì bài đăng này thực sự giải quyết phần kiểm tra nghiêm ngặt của thông báo lỗi.
Shibumi

1
+1 từ tôi cũng như để giải quyết nội dung của câu hỏi. Tùy thuộc vào các yếu tố có thể có nhiều việc để làm. Cách tiếp cận này làm suy giảm việc kiểm tra máy chủ từ "nghiêm ngặt" thành "một số" (thuật ngữ của tôi). Trong tình huống của tôi khiến ssh không được phép đăng nhập vì cách tôi muốn đăng nhập là nhập mật khẩu và điều đó đã bị vô hiệu hóa bởi "một số" máy chủ kiểm tra. Vì vậy, bạn phải tiếp tục và trực tiếp ssh để sử dụng / dev / null dưới dạng "UserKnownhostsFile". Điều này đặt máy chủ kiểm tra thành "không" có hiệu lực và áp dụng CẢNH BÁO DIRE ở trên, vì vậy đừng thực hiện nó trên toàn cầu hoặc vĩnh viễn.
người đàn ông không gian Cardiff

Đây thực sự là một giải pháp thanh lịch. Cám ơn vì đã chia sẻ!
LeOn - Han Li

10

Một cách khác để loại bỏ StricthostKeyChecking, khi bạn chỉ cần làm điều đó cho một máy chủ duy nhất:

ssh <server> -o StrictHostKeyChecking=no

Sẽ cho phép bạn đăng nhập nhưng không khắc phục vấn đề vĩnh viễn.
Andres Canella

Khi tôi làm điều đó, nó cho tôi cơ hội để thêm khóa, sau đó khắc phục sự cố vĩnh viễn
Greg Dougherty

Có lẽ chúng ta có vấn đề khác nhau? Tôi đang kết nối với một máy chủ có IP khác trước đó.
Andres Canella

Nếu bạn có một máy chủ có dữ liệu đã thay đổi, thì bạn cần xóa nó khỏi tệp máy chủ đã biết (sau lần đầu tiên xác định rằng thay đổi là chính xác) và thêm thông tin mới. Nếu bạn có một máy chủ mới, -o sẽ cho phép bạn kết nối với máy chủ và thêm thông tin của nó.
Greg Dougherty

Tôi nghĩ rằng đây thực sự là một cách thực hành tốt để giữ StricthostKeyChecking được đặt thành CÓ trong cấu hình của bạn và chỉ sử dụng công tắc này khi bạn biết bạn đang kết nối với máy chủ mới hoặc đã tự thay đổi các phím trên máy chủ cũ.
mohak

5

Trước hết, đây có phải là máy của bạn? Bạn đã cố ý thay đổi các phím máy chủ? Nếu không tôi sẽ rất lo lắng rằng một cái gì đó đã thay đổi dữ liệu đó.

Thứ hai, bật lên ssh gỡ lỗi,

ssh -vvv user@host

và xem những gì cho bạn biết, cũng hãy thử tìm kiếm, / var / log / safe và / var / log / message trên máy chủ mà bạn đang cố gắng kết nối để tìm manh mối, sshd đưa ra thông báo lỗi tốt.

Thứ ba, máy này có kết nối với internet không? Bạn có nên thực sự cho phép đăng nhập root?


1
+1 cho nhận xét đăng nhập gốc
Fahad Sadah

Tất cả những gì cần cho lỗi này xảy ra là máy đích được đánh giá lại. Nếu bạn đang kết nối với một mục tiêu đứng về phía DMZ của bạn, một cuộc tấn công MitM là rất khó xảy ra.
ktappe

3

Bạn đang nhận được điều này bởi vì một cái gì đó đã thay đổi (như NIC mới, IP mới, thay đổi trên phần mềm máy chủ, v.v.). Tập trung bảo mật có một bài viết hay về bảo vệ khóa máy chủ SSH .

Chỉ cần xóa khóa (sử dụng SFTP hoặc tương tự) khỏi máy chủ, bằng cách chỉnh sửa $HOME/.ssh/known_hoststệp và chấp nhận khóa mới khi kết nối tiếp theo.

Kết nối của bạn có thể bị hủy do cài đặt StricthostKeyChecking. Xem chủ đề này cho một vấn đề tương tự.


2
Không, xin đừng làm điều này. Điều này hoàn toàn rỗng tất cả bảo mật tính năng này cung cấp. Vui lòng chỉ xóa khóa cụ thể đã thay đổi, không phải tất cả các know_host.
Adam Gibbins

5
Tôi không khuyên bạn nên xóa tệp know_hosts, tôi khuyên bạn nên chỉnh sửa tệp và xóa khóa khỏi tệp.

Ooop, xin lỗi, đọc sai.
Adam Gibbins

2
Thông báo này chắc chắn không thể được kích hoạt bởi một địa chỉ IP mới, ít hơn nhiều bởi một NIC mới. Xem câu trả lời đúng của Adam Gibbins.
bortzmeyer

1
Trước khi bạn bỏ phiếu xuống (tôi thấy mọi người rất hài lòng với điều này), hãy làm nghiên cứu của bạn. Đọc bài viết này về Focus Focus, securityf Focus.com/inf Focus / 806 . Tôi xin trích dẫn một chút về nó: "Tại sao khóa máy chủ có thể thay đổi? Máy mà bạn muốn kết nối đã được chuyển đến một tên DNS hoặc địa chỉ IP khác hoặc nó được thay thế hoàn toàn bằng một cái mới." Nếu một câu trả lời là không chính xác khủng khiếp, xin vui lòng cho phép cơ hội để sửa chữa. Rốt cuộc, đây là một wiki.

3

Như 'máy chủ' [được định nghĩa rộng rãi, đó có thể là tất cả mọi thứ từ cài đặt lại / multiboot đến một máy tính hoàn toàn khác với địa chỉ IP bạn đã kết nối trước đó, ví dụ như] máy khách ssh đã thay đổi, nó cung cấp cho bạn lỗi.

Không cần thiết phải tắt kiểm tra nghiêm ngặt, cũng không phải việc xóa bán buôn các phím đã lưu là hợp lý.

Hoàn toàn có thể có hai khóa khác nhau được liệt kê trong know_host cho một tên máy chủ hoặc địa chỉ IP cụ thể; cung cấp cho bạn 2 lựa chọn thay thế cho dù bạn nghĩ rằng bạn có thể cần khóa 'cũ' hiện đang được lưu trữ trong know_hosts

Xóa khóa cụ thể mà nó đang đề cập đến, tại l377 của know_hosts cho OP hoặc giữ cả hai

Cách đơn giản nhất để giữ cả hai, tránh xóa các khóa trong know_hosts, là

  1. Chỉnh sửa các tệp know_host để thêm # khi bắt đầu mục nhập 'cũ' được tham chiếu trong tệp know_hosts [@ l377]
  2. Kết nối [ssh với máy chủ], đồng ý với lời nhắc để thêm khóa mới 'tự động'
  3. Sau đó chỉnh sửa lại know_host để xóa #

thêm câu trả lời tại "Thêm khóa máy chủ chính xác trong know_hosts" / nhiều khóa máy chủ ssh cho mỗi tên máy chủ?


Tôi đã không biết về thủ thuật hai phím. Đây không phải là hành vi tài liệu, phải không?
hackerb9
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.