Sửa lỗi SSH: Host key verification failed - Remote Host Identification Has Changed

beginner🌐 Networking2026-04-18| Linux (Ubuntu, CentOS, Debian), macOS, Windows (WSL, Git Bash, PowerShell)

Error Message

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ Host key verification failed.
#ssh#linux#sysadmin#security

Tóm tắt: Cách sửa nhanh

Nếu bạn tin tưởng máy chủ và biết lý do tại sao danh tính của nó thay đổi—có thể bạn vừa cài đặt lại Ubuntu hoặc thay đổi một instance cloud—hãy chạy lệnh này trên máy cục bộ để xóa mục cũ đã lỗi thời:

ssh-keygen -R 192.168.1.105

Thay thế 192.168.1.105 bằng IP hoặc hostname của máy chủ. Lần tới khi kết nối, SSH sẽ yêu cầu bạn chấp nhận fingerprint mới. Chỉ cần nhập yes và bạn sẽ có thể truy cập lại.

Tại sao SSH lại chặn bạn

Hãy coi lỗi này giống như một nhân viên bảo vệ chặn cửa vì "thẻ ID" của máy chủ không khớp với những gì đã được lưu hồ sơ. Khi bạn kết nối lần đầu với một máy từ xa, SSH sẽ lưu public key duy nhất của nó vào ~/.ssh/known_hosts. Nó đóng vai trò như một dấu vân tay kỹ thuật số.

Mọi kết nối sau đó đều thực hiện quá trình bắt tay (handshake). Nếu fingerprint đã thay đổi, SSH sẽ báo động. Nó giả định rằng ai đó có thể đang chặn lưu lượng truy cập của bạn thông qua một cuộc tấn công Man-in-the-Middle (MITM). Mặc dù cảnh báo trông có vẻ đáng sợ, nhưng nó thường được kích hoạt bởi các thay đổi quản trị thông thường.

Điều gì thường kích hoạt cảnh báo này?

  • Cài đặt lại hệ điều hành: Bạn đã xóa máy chủ và cài đặt một bản Debian hoặc CentOS mới.
  • Tái sử dụng IP: Nhà cung cấp cloud đã cấp cho bạn một IP (như 10.0.0.42) từng thuộc về một máy chủ khác vào tuần trước.
  • Thay đổi phần cứng: Bạn đã chuyển dự án của mình sang một máy vật lý mới nhưng vẫn giữ nguyên IP tĩnh.
  • Thay đổi SSH Key: Quản trị viên hệ thống đã tạo lại các host key của máy chủ theo cách thủ công để tuân thủ bảo mật.

Cách khắc phục

Cách 1: Sử dụng ssh-keygen (Cách chuyên nghiệp)

Đây là phương pháp đáng tin cậy nhất. Nó tự động xử lý các hostname đã được băm (hashed) và các định dạng phức tạp trong file known_hosts của bạn. Nó tìm kiếm IP cụ thể và xóa tất cả các mục cũ liên quan đến nó.

# Sử dụng IP hoặc tên miền của máy chủ
ssh-keygen -R 192.168.1.105

Nếu bạn kết nối qua một cổng tùy chỉnh, chẳng hạn như 2222, bạn phải nhập chính xác định dạng như trong nhật ký lỗi:

ssh-keygen -R [192.168.1.105]:2222

Cách 2: Chỉnh sửa thủ công

Đôi khi bạn chỉ muốn can thiệp vào một dòng cụ thể. Hãy nhìn vào thông báo lỗi trên màn hình; nó thường chỉ thẳng đến dòng gây lỗi. Ví dụ:

Key ECDSA vi phạm trong /home/user/.ssh/known_hosts:24

Dòng 24 chính là nguyên nhân. Mở file bằng trình soạn thảo terminal yêu thích của bạn:

nano ~/.ssh/known_hosts

Cuộn xuống dòng 24, xóa toàn bộ dòng đó, lưu và thoát. Đây là cách sửa nhanh nếu bạn có nhiều mục cho cùng một IP và chỉ muốn xóa một mục.

Cách 3: Tạm thời bỏ qua cho tự động hóa

Trong các môi trường tự động hoặc pipeline CI/CD nơi bạn khởi tạo hàng chục máy ảo tạm thời, việc kiểm tra host key có thể là một nút thắt cổ chai. Bạn có thể bỏ qua hoàn toàn việc kiểm tra này, mặc dù bạn không bao giờ nên làm điều này trên một mạng công cộng không đáng tin cậy.

ssh -o "StrictHostKeyChecking=no" root@192.168.1.105

Lệnh này buộc kết nối phải tiếp tục bất kể fingerprint là gì. Hãy sử dụng cách này một cách hạn chế.

Xác minh thay đổi

Thử kết nối lại sau khi xóa key cũ. Bạn sẽ thấy một lời nhắc như sau:

Không thể xác định tính xác thực của máy chủ '192.168.1.105 (192.168.1.105)'.
Fingerprint của key ED25519 là SHA256:nU8zR9X... 
Bạn có chắc chắn muốn tiếp tục kết nối (yes/no)?

Nhập yes. SSH sẽ thêm key mới, chính xác vào file cục bộ của bạn và kết nối sẽ tiến hành bình thường.

Mẹo chuyên nghiệp để quản lý mạng

Những thay đổi danh tính thường xuyên thường bắt nguồn từ việc quản lý IP lộn xộn. Nếu bạn đang chạy một lab tại nhà hoặc một cụm dev cục bộ, DHCP có thể đang cấp lại IP sau mỗi 24 giờ, gây ra những phiền toái liên tục về SSH. Tôi sử dụng Máy tính Subnet của ToolCraft để lập bản đồ các dải IP tĩnh cho các máy ảo của mình. Bằng cách khóa một máy chủ vào một địa chỉ tĩnh như 192.168.1.200, bạn sẽ giảm đáng kể khả năng xung đột IP và các mục known_hosts cũ.

Giữ cho các khối CIDR của bạn có tổ chức đảm bảo rằng khi một host key thực sự thay đổi, bạn sẽ biết đó là do chủ ý chứ không phải lỗi cấu hình.

Đọc thêm

  • Chạy man ssh-keygen để xem các tùy chọn quản lý nâng cao.
  • Kiểm tra man ssh_config để hiểu cách UserKnownHostsFile hoạt động.
  • Tìm hiểu về các bản ghi DNS SSHFP để tự động hóa việc xác minh host key một cách bảo mật.

Related Error Notes