Có thể xóa khóa máy chủ cụ thể khỏi tệp know_hosts của SSH không?


310

Có thể xóa khóa máy chủ cụ thể khỏi tệp know_hosts của SSH không?

Tôi thường kết thúc việc xóa toàn bộ known_hoststập tin, điều mà tôi không có vấn đề gì khi thực hiện, nhưng chỉ vì tò mò, liệu có thể xóa chỉ một mục không?

Tôi mở known_hoststập tin, nhưng tôi đang cố gắng để hiểu nội dung của nó.

Dưới đây là thông điệp tôi phải đối mặt, khiến tôi phải đặt câu hỏi này:

Add correct host key in /home/wissen16/.ssh/known_hosts to get rid of this message.
Offending key in /home/wissen16/.ssh/known_hosts:1
RSA host key for foo.com has changed and you have requested strict checking.
Host key verification failed.

Câu trả lời:


515

Sử dụng lệnh này để xóa các mục từ know_hosts:

ssh-keygen -R hostname

21
Nó hoạt động với một địa chỉ IP là tốt. Chẳng hạn, tôi có một lối tắt máy chủ DNS cho máy chủ Web của mình. Để xóa xung đột giữa các khóa cho tên máy chủ tùy chỉnh và địa chỉ IP, tôi phải xóa các mục nhập cho cả hai. Vì vậy, ssh-keygen -R xxx.xxx.xxx.xxx.
StrangeElement

Như @StrangeEuity nói, đôi khi có thể thấy rằng bạn phải xóa cả máy chủ IP ngoài tên máy chủ.
Gonzalo Cao

4
Thêm vào đó, nó giữ một bản sao lưu tự động (trên máy osx của tôi : Original contents retained as /Users/nha/.ssh/known_hosts.old, giả sử nó giống với Ubuntu).
nha

17
Ngoài ra, nếu bạn đang sử dụng cổng ssh không chuẩn, hãy sử dụng định dạng nàyssh-keygen -R [ssh.sssshh.com]:1234
Shiji.J

Câu trả lời tốt nhất từng có cho câu hỏi này. Hoạt động như một bùa mê
bademba

32

Có, bạn có thể loại bỏ chỉ một phím. Chỉ cần mở nó trong một trình soạn thảo và xóa dòng vi phạm. Số sau dấu hai chấm trong thông báo lỗi là số dòng, vì vậy đó là dòng cần xóa - dòng 1 trong ví dụ của bạn ..


1
Tôi không biết nó đã xác định số dòng, điều đó cực kỳ hữu ích.
deltree

19

Gần đây tôi mới bắt đầu sử dụng khóa máy chủ, nhưng khi tôi gặp rắc rối với chúng, nó thường là một khóa trên mỗi dòng để sao lưu tệp và xóa chúng cùng một lúc cho đến khi bạn tìm thấy đúng. Sau đó thêm những người khác trở lại. Một chút của một chặng đường dài để làm điều đó, nhưng nên làm việc.

Cũng dựa trên lỗi đó và không có ý kiến ​​gì, đó có thể là khóa máy chủ đầu tiên trong tệp có vấn đề vì vậy hãy mở tệp bằng vim

vim ~/.ssh/known_hosts

va đanh

dd

sau đó lưu nó


Bạn có thể sử dụng: đặt nu trong vim để hiển thị số dòng. Câu trả lời Takkat là câu trả lời hay nhất.
Javier Rivera

Tôi đồng ý không biết bạn có thể làm điều đó. Đang sử dụng nó trong tương lai. Tôi giữ ý nghĩa để tra cứu cài đặt số dòng cho vim. cảm ơn.
Buddy Lindsey

3

Sử dụng tên máy chủ ssh-keygen -R sẽ không luôn hoạt động. Nếu bạn có một phiên bản SSH mới hơn đang "ẩn" tên máy chủ để ngăn chặn việc chiếm quyền điều khiển ssh, thì rõ ràng ssh-keygen không thể xóa tên máy chủ.

Ví dụ, tôi có một máy chủ được gọi là build-node-01 và tôi đã kết nối với nó và chấp nhận khóa. Sau đó, tôi xây dựng lại từ đầu, lấy dấu vân tay máy chủ mới và tôi cố gắng kết nối lại, tôi sẽ nhận được cảnh báo rằng có một xung đột trên dòng X (giả sử 3). Tôi chạy ssh-keygen -R hostname, nhưng lần sau khi tôi cố gắng kết nối tôi vẫn nhận được cảnh báo rằng có mâu thuẫn. Tôi chỉ kiểm tra tệp để phát hiện ra rằng tên máy chủ đã được băm và hiển thị [1] Bu4Ch@R@4D0M57uFFthay vì tên máy chủ có thể đọc được.

Trong trường hợp này, cách duy nhất để loại bỏ thành công máy chủ vi phạm là sử dụng

sed -i 'xd' ~/.ssh/known_hosts

Để thực hiện bước này một bước nữa, bạn có thể tạo một bản sao lưu của know_host trong trường hợp bạn xóa sai dòng, trong trường hợp này chỉ cần thêm một .bak (hoặc bất kỳ tiện ích mở rộng nào) vào tùy chọn -i để tạo bản sao lưu với điều đó sự mở rộng. Sử dụng ssh-keygen thực hiện điều này tự động.

sed -i.bak 'xd' ~/.ssh/known_hosts

5
Điều này LAF không đúng. ssh-keygen -R {hostname}sẽ hoạt động, ngay cả khi tên máy chủ bị 'ẩn' (băm). Tuy nhiên, vâng, người ta có thể xóa mục nhập theo số (ví dụ: mục thứ 10 thông qua sed -i.bak 10d ~/.ssh/known_hosts), nhưng điều đó thường không cần thiết. Có thể là một cổng không chuẩn đã được sử dụng, trong trường hợp đó, bạn có thể phải định dạng lệnh dưới dạng (trích dẫn ghi chú):ssh-keygen -R '[hostname]:2222'
michael

Rất vui được biết @michael_n, rất có thể đó là một cổng không chuẩn đã ảnh hưởng đến khả năng loại bỏ mục nhập của tôi. Tôi cũng cần lưu ý rằng nếu bạn đã chấp nhận nhiều dấu vân tay cho một máy chủ lưu trữ, tôi không chắc liệu nó có xóa TẤT CẢ các mục cùng một lúc hay chỉ một lần một lần.
dragon788

1

Chỉ để chia sẻ một câu trả lời sạch sẽ và dễ dàng, tôi vừa tìm thấy. Việc xóa tên máy chủ là hết đối với tôi, vì tập tin đã biết được băm. Tuy nhiên, tôi COULD tự chỉnh sửa mục nhập máy chủ dựa trên số dòng trong thông báo lỗi. Theo ghi nhận của Mike Scott trước đây, số dòng tên máy chủ vi phạm nằm trong thông báo lỗi.

Hoặc, tôi có thể làm điều này. Từ đây: cách sửa khóa vi phạm trong tệp ssh know_hosts

Tôi có một chút ma thuật

sed -i 'xd' ~/.ssh/known_hosts

Thay thế x bằng số dòng và voila. Ông cũng đưa ra một câu trả lời perl nếu sed sẽ không hoạt động.


0
sed '/10\.20\.120\.211/d' ~/.ssh/known_hosts > temp && mv temp ~/.ssh/known_hosts

Trong trường hợp này, 10.20.120.211 là máy chủ tôi muốn xóa khỏi tệp know_hosts của tôi, đảm bảo bạn thoát khỏi các ký tự đặc biệt như (.)


Địa chỉ IP và tên máy chủ không còn được lưu trữ nguyên văn (văn bản rõ ràng) trong tệp máy chủ đã biết, vì vậy điều này sẽ không hoạt động. Người ta nên sử dụng ssh-keygen -R ...(tốt nhất); hoặc, sedvới số dòng cụ thể để xóa. Ngoài ra, để sedtại chỗ, sử dụng -i' option; e.g., sed -i.bak 10d ~ / .ssh / unknown_hosts` để xóa dòng thứ 10 và (tùy chọn) giữ bản gốc trong tệp sao lưu có hậu tố .bak.
michael

0

Bạn có thể tránh xóa máy chủ cụ thể bằng cách cập nhật nó:

ssh-keyscan -t ecdsa hostname >> ~/.ssh/known_hosts

Bằng cách này, bạn không phải kết nối lại với máy chủ.

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.