Câu hỏi Có thể xóa một khóa máy chủ cụ thể khỏi tệp known_hosts của SSH không?


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

Tôi thường sẽ xóa toàn bộ known_hosts tập tin, mà tôi không có vấn đề với việc làm, nhưng chỉ ra khỏi tò mò, là nó có thể loại bỏ chỉ là một mục duy nhất?

Tôi đã mở known_hosts 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 gặp phải, điều này đã khiến tô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.

249
2018-01-10 05:56


gốc




Các câu trả lời:


Sử dụng lệnh này để xóa các mục khỏi known_hosts:

ssh-keygen -R hostname

427
2018-01-10 07:43



Nó cũng hoạt động với địa chỉ IP. Ví dụ, tôi có một phím tắt máy chủ DNS cho máy chủ Web của tôi. Để loại bỏ xung đột tôi có 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.So ssh-keygen -R xxx.xxx.xxx.xxx. - StrangeElement
Như @StrangeElement nói, đôi khi là posible rằng bạn phải loại bỏ cũng IP host ngoài tên máy. - Gonzalo Cao
Plus, 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 nhau đối với Ubuntu). - nha
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ày ssh-keygen -R [ssh.sssshh.com]:1234 - Shiji.Jiang
Câu trả lời hay nhất từ ​​trước đến nay cho câu hỏi này. Làm việc như một sự quyến rũ - bademba


Có, bạn chỉ có thể xóa một khóa. 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 để xóa - dòng 1 trong ví dụ của bạn ..


28
2018-01-10 06:00



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


Gần đây tôi chỉ mới bắt đầu sử dụng khóa của máy chủ, nhưng khi tôi đã nhầm lẫn với chúng thì thường là một khóa trên mỗi dòng để sao lưu tệp và xóa từng tệp một cho đến khi bạn tìm thấy đúng. Sau đó thêm những người khác trở lại. Bit 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ó ý tưởng gì cho đến giờ, nó có thể là khóa máy chủ đầu tiên trong tệp đó là vấn đề để mở tệp bằng vim

vim ~/.ssh/known_hosts

va đanh

dd

sau đó lưu nó.


18
2018-01-10 06:01



Bạn có thể sử dụng: đặt nu in 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 đó. Tôi sẽ sử dụng nó trong tương lai. Tôi giữ ý nghĩa để tra cứu các thiết lập số dòng cho vim. cảm ơn. - percent20


Sử dụng tên máy chủ ssh-keygen -R sẽ không luôn hoạt động. Nếu bạn có phiên bản SSH mới hơn là "ẩn" tên máy chủ để ngăn chặn việc xâm nhập ssh-agent, rõ ràng ssh-keygen không thể hủy bỏ tên máy chủ.

Ví dụ, tôi có một host được gọi là build-node-01 và tôi đã kết nối với nó và chấp nhận khóa. Tôi sau đó xây dựng lại nó từ đầu, nhận được một 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 một cảnh báo rằng có một cuộc xung đột trên dòng X (nói 3). tôi chạy ssh-keygen -R hostnamenhưng lần sau tôi thử kết nối, tôi vẫn nhận được cảnh báo rằng có xung đột. Tôi đã kiểm tra tệp chỉ để khám phá rằng tên máy chủ đã được băm và hiển thị dưới dạng [1] Bu4Ch@R@4D0M57uFF thay vì tên máy chủ có thể đọc được.

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

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

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

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

3
2018-03-24 22:24



Điều này LAF không đúng. ssh-keygen -R {hostname} sẽ hoạt động, ngay cả khi tên máy chủ được 'ẩ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 nhập thứ 10 thông qua sed -i.bak 10d ~/.ssh/known_hosts), nhưng điều đó không thườ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 này, bạn có thể phải định dạng lệnh dưới dạng (dấu ngoặc kép): ssh-keygen -R '[hostname]:2222' - michael
Thật tốt khi biết @michael_n, rất có khả năng đó 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 nê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 chắn nếu nó loại bỏ TẤT CẢ các mục cùng một lúc, hoặc chỉ một lần tại một thời điểm. - dragon788


Chỉ để chia sẻ một câu trả lời sạch sẽ và dễ dàng hơn tôi vừa tìm thấy. Loại bỏ tên máy chủ là cho tôi, vì tệp known_hosts được băm. Tuy nhiên, tôi có thể chỉnh sửa thủ công mục nhập máy chủ dựa trên số dòng trong thông báo lỗi. Như đã lưu ý bởi Mike Scott trước đó, số dòng máy chủ vi phạm đang ở trong thông báo lỗi.

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

Tôi có chút ma thuật cli

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

Thay thế x bằng số dòng, và thì đấy. Ông cũng cung cấp một câu trả lời perl nếu sed sẽ không hoạt động.


1
2018-02-20 00:37





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ủ lưu trữ mà tôi muốn xóa khỏi tệp known_hosts của mình, hãy đảm bảo bạn thoát khỏi các ký tự đặc biệt như (.)


0
2018-02-20 01:32



Đị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, do đó, điều này sẽ không hoạt động. Người ta nên sử dụng ssh-keygen -R ... (tốt hơn); hoặc là, sed với số dòng cụ thể cần xóa. Ngoài ra, để sed tại chỗ, sử dụng -i' option; e.g., sed -i.bak 10d ~ / .ssh / known_hosts` để xóa dòng thứ 10 và (tùy chọn) giữ nguyên bản gốc trong tệp sao lưu bị hậu tố bởi .bak. - michael