Xóa khóa khỏi know_hosts


129

Tôi đã xây dựng một số máy ảo trong vài tuần qua. Vấn đề là, .ssh/known_hostscho tôi người đàn ông trong cảnh báo ở giữa . Điều này xảy ra vì một dấu vân tay khác được liên kết với IP máy ảo.

.ssh/known_hostsTuy nhiên, trong tệp, tôi không tìm thấy bản ghi liên quan đến IP, chỉ có hai chuỗi kỳ lạ, giống như khóa và "ssh-rsa".

Có ai có bất kỳ ý tưởng về cách loại bỏ khóa cũ khỏi known_hosts?


7
"Chuỗi kỳ lạ, giống như khóa" mà bạn đề cập đến là các địa chỉ máy chủ / ip được băm. Đây là một tính năng bảo mật giúp ngăn chặn kẻ xâm nhập biết hệ thống nào bạn có quyền truy cập. Nếu bạn thấy điều này thì ssh_config của bạn đã HashKnownHosts yesđược đặt.
Deebster

1
Nếu bạn cảm thấy nội dung tệp quá khó hiểu, có thể bạn đã kích hoạt ngắt dòng. Vô hiệu hóa nó. Tất cả các dòng bắt đầu với một tên máy chủ hoặc một địa chỉ IP.
Daniel B

Câu trả lời:


90
sed -i '6d' ~/.ssh/known_hosts

Sẽ sửa đổi tệp ~ / .ssh / unknown_hosts: 6, xóa dòng thứ 6.

Theo tôi, sử dụng ssh-keygen -Rlà một giải pháp tốt hơn cho người dùng năng lượng mở, trong khi quản trị viên Linux thông thường của bạn sẽ làm tốt hơn để giữ cho các kỹ năng sed của anh ấy / cô ấy tươi mới bằng cách sử dụng phương pháp trên.


18
Tôi không nghĩ rằng đó là một lời khuyên tốt để chỉnh sửa tệp cấu hình theo cách thủ công nếu bạn có ứng dụng chính thức cho việc đó. Chấp nhận rủi ro không giúp bạn trở thành một người chuyên nghiệp, tìm ra lựa chọn nhanh nhất và an toàn nhất. Nó giống như bảo mọi người đi trước và chỉnh sửa /etc/sudoersmà không cần visudo. Nếu bạn muốn mài giũa sedkỹ năng của mình, hãy tiếp tục và làm điều đó mà không làm rối hệ thống của bạn.
kraxor

2
"Nếu bạn có một ứng dụng chính thức cho điều đó" => cả hai ssh-keygen -Rsed -i {line}dkhá "chính thức", và cả hai sẽ hoạt động trong tương lai gần. Util ssh-keygen cho phép xóa theo số dòng, cả hai đều hoàn toàn chấp nhận được (bởi vì, số dòng thường dễ xử lý hơn và ít bị lỗi hơn so với xử lý tên máy chủ của trung tâm dữ liệu hiện đại).
michael

2
A) Việc xóa đặc biệt là dòng thứ 6, tất cả đều rất "nhìn không có tay". Không có lời giải thích nào về những gì có ý nghĩa về dòng thứ 6 của tập tin?! B) Cũng man ssh-keygenđề cập đến việc ssh-keygen -R hostname bạn vừa nói ssh-keygen -Rmà không có tên máy chủ được chỉ định và bạn chưa giải thích ý của bạn là gì.
barlop 16/03/18

124

Giải pháp đơn giản nhất là:

rm -f .ssh/known_hosts

ssh sẽ tạo lại tập tin một lần nữa, nhưng bạn mất kiểm tra khóa cho các máy chủ khác!

Hoặc, bạn có thể sử dụng:

ssh-keygen -R "hostname"

Hoặc thông báo "man-in-the-middle" ssh sẽ cho biết dòng nào của tệp know_hosts có dấu vân tay vi phạm. Chỉnh sửa tập tin, nhảy đến dòng đó và xóa nó.


55
ssh-keygen -R hostnamecũng sẽ làm việc
grawity

6
Nếu chúng tôi xóa tệp đó, các phím khác cũng sẽ xóa.
shgnInc

16
Xóa tệp là một lời khuyên tồi, nó giống như bảo ai đó mua PC mới vì máy cũ bị chuột hỏng. Chỉnh sửa thủ công một tệp có thể được chỉnh sửa bởi một ứng dụng chính thức cũng là một ý tưởng tồi. Các ssh-keygentùy chọn đã được bổ sung vì một lời nhận xét, nhưng không có lời giải thích. Tôi không nghĩ rằng câu trả lời này xứng đáng nhận được rất nhiều sự ủng hộ.
kraxor

12
-1 vì toàn bộ dòng đầu tiên "xóa toàn bộ tệp know_hosts". Đây là một điều khủng khiếp, khủng khiếp, khủng khiếp để đề xuất, và nên được chỉnh sửa ra.
Olivier Dulac

4
Giải pháp này là quá mức cần thiết. Chỉ cần loại bỏ các dòng vi phạm. Đó là nó.
Blake Frederick

81

Có một công tắc ssh-keygen ( -R) cho việc này.

man ssh-keygen đọc:

-R tên máy chủ

Loại bỏ tất cả các khóa thuộc về hostnametừ một known_hoststập tin. Tùy chọn này hữu ích để xóa các máy chủ băm (xem -Htùy chọn ở trên).


8
Đây là phương pháp dễ dàng và an toàn nhất.

Lưu ý: Điều này sẽ thay đổi các quyền của tệp know_hosts thành 0600. Nếu bạn có một tệp đã biết chia sẻ được biết vì bất kỳ lý do gì, điều này có thể vô hiệu hóa việc chia sẻ tệp.
Jiri Klouda

và một trong những chính xác. Ngoài ra, tôi phải làm [localhost]:port, sử dụng dấu ngoặc vì tôi đã sử dụng một cổng tùy chỉnh mà tôi đoán = /. Giống như những người khác đã nói, tôi cũng sẽ sử dụng phương pháp kiểm tra khóa SSH không để phát triển hệ thống kiểm tra / tạm thời của mình.
Pysis

Điều này loại bỏ tất cả các đại dương vì vậy cách tốt nhất. Bạn có thể thêm khóa mới bằng:ssh-keyscan -H my.ssh.server.example.com >> ~/.ssh/known_hosts;
Nux

18

Cảnh báo sẽ cho bạn biết dòng chính xác trong tệp máy chủ đã biết.

Đây là một ví dụ:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@       WARNING: POSSIBLE DNS SPOOFING DETECTED!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
The RSA host key for foo-bar.net has changed,
and the key for the corresponding IP address 127.0.0.1
is unchanged. This could either mean that
DNS SPOOFING is happening or the IP address for the host
and its host key have changed at the same time.
Offending key for IP in /home/user/.ssh/known_hosts:6
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!

Xem /home/user/.ssh/known_hosts:6phần nào? Nó chỉ định tập tin và số dòng.


10

Bạn cần chạy lệnh sau để thoát khỏi vấn đề này. Mở terminal và gõ lệnh sau:

Đối với tất cả các ví dụ dưới đây, chỉ cần thay thế giá trị sau -R

ssh-keygen -R server-name
ssh-keygen -R server.ip.addre.ss
ssh-keygen -R 202.54.1.5
ssh-keygen -R server1.example.com

Phương pháp này đã được đề xuất trong các câu trả lời trước. Bạn có thể mở rộng dựa trên những gì khác nhau trong câu trả lời của bạn?
Burgi

@Burgi - câu trả lời này cung cấp nhiều chi tiết hơn về cú pháp của ssh-keygen -Rbất kỳ câu trả lời nào khác cho đến nay. Nó hiển thị bằng ví dụ chính xác những gì bạn có thể viết sau -R. Vì vậy, câu trả lời này là đáng giá, mặc dù nó không phải là một câu trả lời hoàn toàn mới.
Yitz

@Yitz Nhận xét của tôi đã được thực hiện như một phần của đánh giá. Vào thời điểm đó (18 tháng trước) tôi nghĩ rằng câu hỏi cần một chút giúp đỡ để làm cho nó thậm chí còn tốt hơn.
Burgi

8

Bạn cũng có thể hướng dẫn ssh không kiểm tra tệp đã biết bằng cách sử dụng các cờ UserKnownhostsFile và StricthostKeyChecking.

Ví dụ:

ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@example.com

Để dễ sử dụng, bạn có thể đặt bí danh này:

alias boldssh='ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no'

Bây giờ bạn chỉ có thể in đậm bất cứ khi nào bạn chắc chắn rằng bạn tin tưởng chứng chỉ của máy chủ.


8
Thật là một ý tưởng khủng khiếp. Vô hiệu hóa vĩnh viễn một lớp bảo mật chỉ vì bạn quá lười biếng trong việc ~/.ssh/known_hostscập nhật? Tại sao không đi trước và sử dụng telnet? "Bất cứ khi nào bạn chắc chắn" - nếu bạn chắc chắn, thì bạn không biết cuộc tấn công MITM là gì và có lẽ bạn nên dành thời gian để đọc một số tài liệu hay.
kraxor

2
Dựa trên câu hỏi của OP tôi nghĩ rằng đây là một câu trả lời hợp lệ. Đôi khi bạn có một hệ thống kiểm tra mà bạn đang tạo / phá hủy rất nhiều máy ảo. (Tôi đang làm điều này ngay bây giờ khi tôi chuẩn bị cho kỳ thi RHCE.) Có thể không có bất kỳ ý nghĩa bảo mật nào. Mặc dù lưu ý các ý nghĩa bảo mật là tuyệt vời, tôi không nghĩ rằng nó phải được gắn nhãn là "ý tưởng khủng khiếp".
Rick Chatham


3

Tất cả các câu trả lời đều tốt, nhưng đối với SSH pro thực sự, chúng tôi đã thiếu thông tin về cách xóa chữ ký ssh bằng số cổng.

  • Lệnh xóa chữ ký máy chủ SSH đơn giản:

    ssh-keygen -R example.com
    
  • Xóa khóa ssh phức tạp, ví dụ: bạn kết nối với ssh trên cổng không chuẩn 222:

    ssh example.com -p 222
    

và bạn nhận được cảnh báo và để loại bỏ điều này, bạn cần sử dụng số cổng dấu ngoặc vuông:

    ssh-keygen -R [example.com]:222

Hy vọng điều này sẽ giúp cho người dùng cấu hình không chuẩn.


Chính xác những gì tôi đang tìm kiếm. Cảm ơn bạn!
aexl

1

Đây là một phương pháp sử dụng trình soạn thảo Ex:

ex +6d -scwq ~/.ssh/known_hosts

trong đó số 6 là số dòng của bạn được đề cập trong thông báo cảnh báo. Chẳng hạn như cái này:

Khóa vi phạm cho IP trong /home/user/.ssh/ Unknown_hosts:6 <== LINE SỐ


Nói chung, nên sử dụngex để chỉnh sửa các tệp không tương tác , thay vào đó sed, đó là phần bổ sung S tream ED-itham số của nó là phần mở rộng FreeBSD không chuẩn.


0

Mục nhập cho tên máy chủ hoặc ip phải ở cột đầu tiên. Cảnh báo cũng nên liệt kê một số dòng trong đó khóa vi phạm nằm.


0

Bạn cũng có thể xóa một dòng duy nhất khỏi các máy chủ đã biết với ví dụ: rmknnhost 111 (111 là dòng cần xóa):

#! /usr/bin/env ruby
line = ARGV[0] || raise("gimme line to remove")
hosts = File.expand_path("~/.ssh/known_hosts")
content = File.readlines(hosts)
removed = content.delete_at line.to_i - 1
puts "Removed:\n#{removed}"
File.open(hosts, 'w'){|f| f.write content * ""}

Lưu cái này như rmknownhosttrong một thư mục từ của bạn PATH.


Lợi ích của việc này hơn là làm điều đó trong bất kỳ trình soạn thảo văn bản nào? Có một số lý do để không làm điều đó theo cách đó, như làm thế nào sudoers phải được chỉnh sửa với visudo?
Andy Lester

Những gì distro đi kèm với điều này? Ubuntu dường như không có nó.
flickerfly

Lợi ích là nó tự động và nhanh chóng / đó là một nhị phân riêng biệt mà bạn tự thêm
thu nhập

2
Bạn có thể vừa đăng kịch bản của mình ở đây thay vì liên kết mục blog của riêng bạn mà bạn đã tạo vào ngày bạn đăng câu trả lời này. Điều này đủ điều kiện là thư rác IMHO. Chưa kể rằng bạn có thể tạo một bí danh đơn giản để đạt được kết quả tương tự, không cần một tập lệnh ruby ​​dài 7 dòng.
kraxor

1
hoặc chỉ cần thêm nó vào ~ / .bashrc: sshdel() { sed -i "${@}d" ~/.ssh/known_hosts; }và gọi nó bằng sshdel [line number]. không ruby, không nhị phân, không lo lắng.
rubynorails

0

Nó là một tập tin văn bản. Bạn có thể dễ dàng chỉnh sửa bằng vi (m) và chỉ cần xóa dòng trong câu hỏi (dd) và lưu tệp (wq). Nhưng nếu có một lệnh cụ thể để loại bỏ một máy chủ, đó có lẽ là phương pháp an toàn nhất.


Tôi không thấy cách chỉnh sửa tệp trực tiếp trong VIM là "không an toàn". Nó dựa trên mức độ thoải mái của bạn với VIM. Đặc biệt với tệp này, rủi ro lớn nhất bạn gặp phải là xóa quá nhiều khóa, trong trường hợp đó bạn sẽ chỉ được nhắc lại.
Rick Chatham

"An toàn" mà tôi đã đề cập liên quan đến 1) quên / không biết xóa thông tin phụ thuộc trong các tệp khác (nếu có) và 2) Vô tình xóa nhiều hơn hoặc ít hơn mức cần thiết, do đó phá vỡ tệp.
Ryan Griggs
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.