Khắc phục cảnh báo 'sudo: unable to resolve host' trên Linux

beginner🐧 Linux2026-05-01| Các bản phân phối Linux (Ubuntu, Debian, CentOS, RHEL và các Cloud Instance như AWS/GCP)

Error Message

sudo: unable to resolve host myhostname: Name or service not known
#sudo#hostname#quan-tri-linux#mang-may-tinh

Vấn đề

Không có gì làm gián đoạn luồng công việc của bạn hơn là một lệnh terminal bị treo không rõ lý do. Tôi đã nhận thấy điều này gần đây trên một instance Debian mới: mỗi khi tôi chạy lệnh sudo, con trỏ sẽ nhấp nháy trong khoảng 5 giây trước khi yêu cầu mật khẩu. Sau đó, nó sẽ hiển thị cảnh báo này:

sudo: unable to resolve host my-web-server: Name or service not known

Mặc dù lệnh cuối cùng vẫn được thực thi, nhưng độ trễ 5 giây đó là một rắc rối lớn khi bạn đang thực hiện triển khai (deployment). Điều này xảy ra do định danh của hệ thống không đồng bộ. Hostname của bạn đã được thiết lập, nhưng hệ điều hành không biết tên đó nằm ở đâu trong mạng. Về cơ bản, đây là lỗi tra cứu DNS nội bộ khiến sudo phải đợi cho đến khi hết thời gian chờ (timeout).

Quy trình kiểm tra (Debug)

Tại sao sudo lại quan tâm đến hostname của bạn? Đằng sau hậu trường, nó kiểm tra tệp sudoers để tìm các quy tắc dành riêng cho host. Nếu nó không thể phân giải tên hệ thống hiện tại thành địa chỉ IP, nó sẽ treo trong khi chờ đợi một phản hồi không bao giờ tới.

Bước 1: Xác nhận hostname hiện tại

Trước tiên, hãy kiểm tra xem hệ thống đang nhận tên của nó là gì. Chạy lệnh sau:

hostname

Nếu bạn muốn biết thêm chi tiết kỹ thuật, hãy sử dụng:

hostnamectl

Giả sử hostname của bạn là my-web-server. Đây chính là chuỗi ký tự mà sudo không tìm thấy trong các bản ghi nội bộ của bạn.

Bước 2: Kiểm tra /etc/hosts

Tiếp theo, hãy xem tệp /etc/hosts của bạn. Tệp này đóng vai trò như một "danh bạ điện thoại" nội bộ. Nó ánh xạ tên máy với địa chỉ IP trước khi máy tính của bạn cố gắng kết nối với máy chủ DNS trên internet.

cat /etc/hosts

Trong một thiết lập bị lỗi, bạn có thể sẽ thấy nội dung như thế này:

127.0.0.1   localhost
::1         localhost ip6-localhost ip6-loopback

Lưu ý rằng my-web-server đang bị thiếu. Vì nó không được ánh xạ tới 127.0.0.1 (địa chỉ loopback nội bộ của bạn), hệ thống sẽ bị bối rối và gây ra độ trễ.

Giải pháp

Khắc phục lỗi này chỉ mất một phút. Chúng ta chỉ cần thông báo cho hệ thống rằng hostname của bạn thuộc về máy cục bộ.

1. Chỉnh sửa tệp hosts

Mở tệp cấu hình bằng trình chỉnh sửa văn bản. Bạn sẽ cần quyền sudo cho việc này, vì vậy hãy chuẩn bị tinh thần chờ đợi 5 giây đó lần cuối cùng:

sudo nano /etc/hosts

2. Thêm ánh xạ hostname

Tìm dòng bắt đầu bằng 127.0.0.1 và thêm hostname của bạn vào cuối. Nó sẽ trông như thế này:

127.0.0.1   localhost my-web-server

Nếu bạn muốn gọn gàng hơn, bạn có thể thêm nó thành một dòng riêng ngay bên dưới:

127.0.0.1   localhost
127.0.0.1   my-web-server

Đối với các hệ thống sử dụng IPv6, tốt nhất là bạn cũng nên cập nhật dòng ::1:

::1         localhost ip6-localhost ip6-loopback my-web-server

Lưu và thoát (trong Nano, nhấn Ctrl+O, Enter, sau đó là Ctrl+X).

3. Xác minh kết quả

Bây giờ, hãy kiểm tra bằng một lệnh đơn giản. Nó sẽ phản hồi ngay lập tức:

sudo true

Nếu dấu nhắc lệnh xuất hiện ngay lập tức mà không có thông báo cảnh báo, bạn đã giải quyết xong vấn đề.

Tại sao điều này thường xảy ra trên các Cloud Instance

Tôi thấy điều này thường xuyên nhất trên AWS EC2 hoặc Google Cloud. Khi bạn khởi tạo một instance t3.micro hoặc tương tự, nhà cung cấp sẽ gán một tên nội bộ như ip-10-0-0-5. Nếu bạn thay đổi tên thủ công bằng lệnh hostnamectl set-hostname, hệ thống sẽ cập nhật /etc/hostname nhưng thường bỏ qua /etc/hosts. Sự không khớp này chính là gốc rễ của vấn đề.

Những điểm chính cần lưu ý

  • Luôn đồng bộ: Mỗi khi bạn thay đổi /etc/hostname, bạn phải cập nhật /etc/hosts. Chúng luôn đi đôi với nhau.
  • Sudo rất nhạy cảm: Sudo kiểm tra việc phân giải mạng nghiêm ngặt hơn các công cụ khác để đảm bảo các chính sách bảo mật được áp dụng chính xác.
  • Đừng xóa loopback: Không bao giờ xóa mục 127.0.0.1 localhost. Làm vậy có thể gây lỗi cho các dịch vụ hệ thống quan trọng và các cơ sở dữ liệu nội bộ.

Mẹo chuyên nghiệp cho Quản trị viên mạng

Khi bạn đang mở rộng mạng nội bộ hoặc gán IP tĩnh cho một cụm máy chủ, những lỗi đặt tên nhỏ có thể gây ra những rắc rối lớn. Tôi nhận thấy rằng việc kiểm tra kỹ các dải CIDR từ sớm sẽ giúp ngăn chặn những "cuộc khủng hoảng định danh" này.

Tôi thường sử dụng Subnet Calculator trên ToolCraft khi lập kế hoạch cho một VPC mới. Đây là cách nhanh chóng để đảm bảo các dải IP của tôi hợp lý trước khi bắt đầu mã hóa cứng hostname vào các script tự động hóa. Nó dựa trên trình duyệt và giữ cho cấu trúc IP của bạn ở chế độ riêng tư, biến nó thành một công cụ đáng tin cậy để kiểm tra nhanh.

Related Error Notes