Thông báo lỗi, sudo: không thể giải quyết máy chủ (không có)


737

Khi tôi chạy sudothiết bị đầu cuối bị kẹt trong vài giây và sau đó xuất ra một thông báo lỗi. Thiết bị đầu cuối của tôi trông như thế này:

ubuntu@(none):~$ sudo true
sudo: unable to resolve host (none)

Tôi có thể làm gì để giải quyết nó?


2
Xin vui lòng gửi nội dung của /etc/hostname/etc/hosts.
sắp xếp

48
Tôi khuyên bạn không nên đóng câu hỏi này vì quá cục bộ . Có nhiều người dùng có thể nhầm tưởng rằng họ đã đặt một tên trong hoststệp của mình nhưng thay vào đó lại đặt một tên khác, đặc biệt là trên nhiều mạng, máy tính được đặt tên tương tự. Câu hỏi này (và câu trả lời) sẽ hiển thị khi ai đó tìm kiếm vấn đề đó và câu trả lời sẽ nhắc họ kiểm tra sự khác biệt đó, mặc dù lỗi chính tả sẽ khác.
Eliah Kagan

9
chắc chắn bạn hostnamecùng với hosts. ví dụ: tên máy chủ là ubfox-pc và máy chủ là ubfox-pc phải giống nhau.
Muhammad Sholihin

1
Tôi chạy vào đây ngày hôm nay. Vấn đề là những gì tôi có trong tên máy chủ không nằm trong / etc / hosts. Để wit: $ hostname => 'mybox' $ grep 'mybox' / etc / hosts => 192.168.1.2 mybox.example.com. Tôi cần thêm 'mybox' sau tên miền của mình trong / etc / hosts => 192.168.1.2 mybox.example.com mybox
Ray

3
Tôi không thể đăng câu trả lời vì câu hỏi này được bảo vệ và tôi không có đủ danh tiếng ở đây. Trong trường hợp của tôi, tôi đã giải quyết vấn đề bằng cách khởi động lại trình quản lý mạng : sudo /etc/init.d/network-manager restart. Tuy nhiên, tôi tự hỏi tại sao ở nơi đầu tiên lại sudolãng phí thời gian chờ đợi những thứ liên quan đến mạng. Không nên sudolàm việc mà không có vấn đề khi mạng không có sẵn?
bli

Câu trả lời:


999

Hai điều cần kiểm tra (giả sử máy của bạn được gọi my-machine, bạn có thể thay đổi điều này cho phù hợp):

  1. Rằng /etc/hostnametập tin chỉ chứa tên của máy.

  2. Điều đó /etc/hostscó một mục cho localhost. Nó nên có một cái gì đó như:

     127.0.0.1 localhost.localdomain localhost
     127.0.1.1 máy của tôi
    

Nếu một trong hai tệp này không đúng (vì bạn không thể sudo), bạn có thể phải khởi động lại máy vào chế độ khôi phục và thực hiện sửa đổi, sau đó khởi động lại vào môi trường thông thường của bạn.


31
Tên máy chủ sẽ không thay đổi cho đến khi bạn khởi động lại. Nếu bạn muốn thay đổi nó mà không cần khởi động lại máy thì hãy làm theo các bước trên và sau lần chạy đó: - "sudo hostname my-machine" để xem điều này có hoạt động hay không "sudo hostname" Nó sẽ hiển thị tên máy chủ của bạn. Phương pháp này có thể được sử dụng như một phương thức tạm thời để thay đổi tên máy chủ. sau khi khởi động lại, giá trị từ tệp / etc / hostname được sử dụng.
Yashvit

2
Lưu ý: vì bạn không thể bắt đầu với, nên rất khó để chỉnh sửa các tệp đó. Giải pháp của tôi là bằng cách nào đó tôi có thể sudo visudo và thay đổi #%admin ALL=(ALL) ALLthành %admin ALL=NOPASSWD: ALL, sau đó khởi động lại và sudo su -, chỉnh sửa các tệp đó, đặt / sửa tên máy chủ, khởi động lại và mọi thứ đều hoạt động.
Ian M

4
Tôi đang sử dụng Hệ thống con Linux trong Windows và tôi gặp phải vấn đề này. Sau khi làm theo câu trả lời của bạn, nó đã được giải quyết.
amarVashishth

2
bạn cũng có thể cần thêm ::1 localhostvào /etc/hosts(đây là phiên bản IPv6 của 127.0.0.1, còn gọi là địa chỉ loopback)
Woodrow Barlow

11
Tại sao ví dụ của bạn có 127.0.0.1 localhostnhưng 127.0.1.1 my-machine?
Adam

193

Chỉnh sửa /etc/hosts và nối tên máy chủ mới của bạn vào dòng 127.0.0.1 (hoặc tạo một dòng mới nếu bạn thích điều đó).

Của tôi trông như:

127.0.0.1       localhost localhost.localdomain penguin

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Thay thế penguintrong ví dụ trên bằng tên máy chủ mới của bạn như được nêu trong /etc/hostnametệp.


2
Làm thế nào anh ta có thể chỉnh sửa tập tin / etc / hosts nếu anh ta không thể sudo? Trừ khi anh ta tạo một tài khoản rood bằng mật khẩu (ý tưởng tồi)
Dennis

9
@Dennis Bạn vẫn có thể thực thi sudongay cả khi thông báo đó được hiển thị. IIRC bạn vẫn phải nhập mật khẩu của mình tại mỗi lần gọi. Nếu điều này không hoạt động, bạn có thể khởi động lại vào bảng điều khiển phục hồi và áp dụng các thay đổi. Một tài khoản root với mật khẩu không được khuyến khích.
Lekensteyn

68

Thêm tên máy chủ của bạn để /etc/hoststhích như vậy:

echo $(hostname -I | cut -d\  -f1) $(hostname) | sudo tee -a /etc/hosts

2
Thật thông minh, nhưng tôi không nghĩ rằng nó có xu hướng là tự động hóa một cái gì đó như thế này.
mwfearnley

1
Điều này không nối thêm tên máy chủ vào tệp máy chủ. Có một giả định cố hữu rằng không có gì ở giữa ip loopback, ánh xạ tới localhost và cuối tệp, nhưng hiện tại có một số nội dung IPv6 giữa dòng này và cuối tệp, trong trường hợp đó giải pháp này không thực sự mang lại cho bạn những gì bạn muốn Một nhận xét liên quan: Chỉnh sửa tệp này hoặc các tệp khác yêu cầu sử dụng sudo và đó là sudo mà chúng tôi đang cố gắng khắc phục. Chúng ta vẫn cần để có thể chạy sudo. Trong trường hợp này, tên máy chủ sudo -h có thể được sử dụng để thay đổi quyền trước tiên trên các tệp hoặc đạt được độ cao để chỉnh sửa chúng.
shivesh suman

1
điều này thất bại bởi vì tôi không thể "sudo tee .." nhưng điều này đã tạo nên mánh khóe: echo $(hostname -I | cut -d\ -f1) $(hostname) | sudo -h 127.0.0.1 tee -a /etc/hosts
Ronny Elflein r11lein

31

Lưu ý, đây là một câu trả lời cho câu hỏi này đã được hợp nhất với câu hỏi này.

Tên máy chủ của bạn ( dave00-G31M-ES2L) không được đại diện trong /etc/hosts. Thêm một Ldòng này:

127.0.1.1   dave00-G31M-ES2

Vì vậy, nó trở thành:

127.0.1.1   dave00-G31M-ES2L

Để thực hiện việc này, hãy mở bảng điều khiển (nhấn Ctrl+ Alt+ T) và gõ:

sudo gedit /etc/hosts

Thêm chữ cái Lnhư đã đề cập, lưu và thoát.


10
Nhớ lại! Sử dụng sudoedit(hoặc sudo -e). Để chỉ định trình chỉnh sửa ưa thích, hãy sử dụng EDITORbiến môi trường (ví dụ export EDITOR=vim:) vì nó tạo một bản sao ngoại tuyến để chỉnh sửa và sau đó ghi đè sạch sau khi chỉnh sửa.
ngày

2
Và có một người khác ở đây đề nghị sudokhi không còn nữa sudo. sudokhông làm việc, thưa ông. sudo: unable to resolve host ...
Màu xanh lá cây

@Green: Không sudo? Thông báo lỗi bạn đề cập đến từ sudolệnh. Có lẽ bạn có ý nghĩa gì đó khác nhau?
Thor

@Green sudohoạt động tốt. Nó chỉ không thể lưu trữ bất kỳ trạng thái nào (ví dụ như Lekensteyn đã nói ở nơi khác bạn phải nhập mật khẩu của mình mỗi lần).
Wlerin

4
Nếu bạn gặp vấn đề này trên Bash của W10 và đến câu hỏi này từ google, đây là câu trả lời phù hợp với tôi. Tôi đã thay đổi 127.0.0.1 thành "127.0.0.1 localhost DESKTOP-SLQK4CV" (bằng cách thực hiện "sudo vim / etc / hosts" (mẹo nhanh cho người mới vim: nhấn i trước khi nhập để chuyển sang chế độ chèn, nhấn esc để thoát rằng, hãy viết ": wq" để lưu và thoát hoặc ": q!" để thoát mà không lưu), trong trường hợp của tôi, sudo đã hoạt động nhưng chỉ nói rằng nó không thể kết nối với DESKTOP-SLQK4CV) và nó bắt đầu hoạt động với tôi.
Ave

16

Tôi gặp vấn đề này khi tôi đang sử dụng Ubuntu trên VPS. Tôi đã giải quyết nó chỉnh sửa tập tin / etc / hosts.

chạy lệnh này:

sudo nano /etc/hosts

và sau đó thêm:

127.0.0.1   localhost.localdomain localhost
127.0.1.1   ubuntu

Tôi hy vọng điều đó sẽ giải quyết vấn đề của bạn :)

PS: Hãy nhớ khởi động lại máy tính của bạn!


1
Ngoài ra, hãy xem tên thiết bị của bạn (được in trên thanh tiêu đề Terminal sau dấu @) có khớp với tên trên dòng thứ hai của hoststệp ("ubfox" trong ví dụ của Luca). Dòng đầu tiên cũng có thể chỉ là "localhost".
Waldir Leoncio

2
Nhớ lại! Sử dụng sudoedit(hoặc sudo -e). Để chỉ định trình chỉnh sửa ưa thích, hãy sử dụng EDITORbiến môi trường (ví dụ export EDITOR=vim:) vì nó tạo một bản sao ngoại tuyến để chỉnh sửa và sau đó ghi đè sạch sau khi chỉnh sửa.
ngày

11

Tôi đã gặp vấn đề tương tự mặc dù tên máy chủ trong tệp / etc / hostname và / etc / hosts khớp với nhau.

Tên máy chủ của tôi là "staging_1". Hóa ra bạn không thể có dấu gạch dưới trong tên máy chủ của mình, đó là lý do tại sao tôi gặp phải lỗi này. Thay đổi dấu gạch dưới thành dấu gạch nối đã khắc phục vấn đề của tôi.


11

Trong AWS, truy cập vpc của bạn và bật "Tên máy chủ DNS".


2
Chào mừng bạn đến với Askubfox! Bạn có thể mở rộng một chút về điều này? Nó không quá rõ ràng những gì bạn muốn nói (ít nhất là với tôi) ..
Anh Cả Geek

2
Đây là câu trả lời đã giúp tôi. Amazon AWS đã thay đổi kể từ lần cuối cùng tôi nhìn vào nó. Các VPC có các tùy chọn DNS và chúng cần được bật trước khi bất kỳ độ phân giải DNS nào hoạt động.
Chris Moore

1
có thể tìm thấy tùy chọn Bật tên máy chủ DNS (ví dụ) trong menu chuột phải của mục nhập vpc
Matteo Scotuzzi

Không cóDNS Hostnames
Green

7

Triệu chứng được đưa ra trong câu hỏi có thể tương quan mạnh mẽ với vấn đề cụ thể hơn này:

$ hostname --fqdn
hostname: Temporary failure in name resolution

Có nhiều cách khác nhau để giải quyết vấn đề này, một trong số đó là thêm tên máy chủ của bạn dưới dạng localhost /etc/hosts(như thể hiện trong một số câu trả lời khác). Đây có thể là điều đúng đắn để làm nói chung, nhưng nó không phải là giải pháp duy nhất có thể.

"Tên miền đủ điều kiện" có thể được cung cấp bởi máy chủ DNS bên ngoài hoặc tương tự (nếu có sẵn trên mạng của bạn). Trong trường hợp này, sudosẽ không khiếu nại, mặc dù thiếu mục nhập /etc/hosts.


Lưu ý: sudocố gắng hủy đăng ký tên máy chủ, mặc dù không nhất thiết phải có, do khả năng tùy chọn trong tệp sudoers. Xem lệnh sudo cố gắng tìm kiếm tên máy chủ .

Miễn là độ trễ không quá dài, thông báo lỗi này thường vô hại.


Nhanh hơn một chút:sudo --host=localhost
tộc



5

Một số trình giả lập thiết bị đầu cuối sẽ không cập nhật lời nhắc với tên máy chủ chính xác cho đến khi bạn đóng và khởi động lại trình giả lập (lxterminal, tôi đang nói chuyện với bạn).

Tôi đã dành 30 phút để chiến đấu với lỗi này sau khi chỉnh sửa tên máy chủ và tệp lưu trữ của mình và chạy sudo service hostname restartcho đến khi tôi chạy sudo hostnamevà thấy rằng tên máy chủ là giá trị mới, mặc dù lời nhắc đã hiển thị giá trị cũ.


1
Vấn đề không phải là trình giả lập thiết bị đầu cuối, đó là các trình bao đã lưu trữ giá trị.
Mark Stosberg

4

Trong trường hợp của tôi, đó là vấn đề, tôi đã thay đổi hostnamethành manvì tôi muốn biết liệu có một số tham số bạn có thể sử dụng không hostname. Thay vào đó, thay đổi của tôi hostnameđể manvà tôi luôn luôn có cùng một thông điệp như bạn

sudo: unable to resolve host (none)

sau khi thay đổi tên máy chủ trở lại `localhost, mọi thứ hoạt động tốt trở lại

hostname localhost

3

Mọi người khuyên nên sửa đổi /etc/hosts. Nhưng trong một số trường hợp, điều này có thể không thực hiện được (ví dụ bên trong một container docker). Vì vậy, tôi phải tìm một cách tốt hơn và tôi đã nghĩ ra điều này:

echo "alias sudo='sudo -h 127.0.0.1'" >> ~/.bash_aliases
source ~/.bashrc

Bí danh không hoạt động trong tập lệnh bash, nhưng chúng ta có thể sử dụng các biến: sudo='sudo -h 127.0.0.1'


2

Xin lỗi tôi không thể giúp bạn nhiều nhưng vì nó nói "không thể giải quyết máy chủ" hãy thử chạy:

hostname

Và xem đầu ra là tên máy chủ của máy. Nếu không, vấn đề là cấu hình máy chủ, không phải sudo.


Tôi đã làm điều đó có tên máy chủ của tôi. Tôi cũng có mục trong / etc / hosts. Tôi vẫn nhận được lỗi.
chandresh

Bạn đã khởi động lại máy sau khi thay đổi tập tin máy chủ?
Animaletdesequia

Không. Mặc dù nhóm IT của tôi cho biết có vấn đề với tệp khóa cũng như khóa gpg với múa rối. Bây giờ, nó đã được giải quyết mà không cần khởi động lại ..
chandresh

2

OP đã viết:

Đó là tất cả trong / etc / hostname. Trên hai máy chủ bị bệnh của chúng tôi, nó trông như thế này:

ubuntu@(none):~$ cat /etc/hostname
linux-web-n ip-10-128-##-##

Trong khi trên một máy chủ không có vấn đề này, chúng tôi đã có:

ubuntu@ip-10-128-##-###:~$ cat /etc/hostname
ip-10-128-##-###

Đã xóa linux-web-nphần, khởi động lại và mọi thứ đều ổn.


2

bạn có thể gặp lỗi nếu máy chủ hoặc tệp tên máy chủ chứa các ký tự không hợp lệ. Chỉ những biểu tượng này được cho phép: az, AZ, 0-9


2

Tôi có vấn đề này như nhau! Tôi đã thay đổi tên VPS của mình thông qua bảng điều khiển quản trị viên trực tuyến không thay đổi tên máy trong tệp máy chủ Tất cả những gì tôi đã làm là chạy:

sudo nano /etc/hosts

Sau đó, tôi chỉnh sửa nó từ đây:

127.0.1.1 Megabyte Megabyte
127.0.0.1 localhost

Về điều này:

127.0.1.1 Debian Debian
127.0.0.1 localhost

và điều đó đã sửa lỗi của tôi! Hy vọng điều này sẽ giúp!


1

Tôi đã từng gặp vấn đề tương tự. Tôi đã giải quyết nó bằng cách chỉnh sửa các tập tin / etc / hosts và / etc / hostname ... trên tập tin / etc / hosts, chỉ cần chỉnh sửa phần trên cùng như hiển thị bên dưới.

#vi /etc/hosts
    127.0.0.1   localhost
    127.0.1.1   localhost  myhostname




#vi /etc/hostname
    myhostname

127.0.1.1 localhost myhostnamehay 127.0.1.1 myhostname?
Mostafa Ahangarha

2
Làm thế nào bạn có thể chỉnh sửa /etc/hostsmà không cần sudo. sudokhông hoạt độngsudo: unable to resolve host ...
Green

1

nếu bạn không thể sudo bạn có thể đăng nhập bằng root thông qua su. IE: su root (theo thuật ngữ x). sau đó cung cấp mật khẩu gốc khi được nhắc, sau đó bạn có thể chỉnh sửa các tệp bằng nano. Mật khẩu gốc trong 'buntu giống như mật khẩu bạn sẽ sử dụng cho sudo.


5
Mật khẩu gốc trong Ubuntu không phải là mật khẩu giống nhau sudo. rootlà tài khoản riêng của nó, không có mật khẩu được đặt theo mặc định.
The Wanderer

1

Nếu bạn đang sử dụng Vagrant, sau đó đăng nhập vào khách và chạy apt-get --no-install-recommends install virtualbox-guest-utils


0

Trong trường hợp vấn đề của bạn là /etc/hostnametệp đó và /etc/hosts, cả hai tệp đều có tên máy chủ mong muốn của bạn và máy của bạn vẫn hiển thị lỗi

sudo: unable to resolve host

Hãy thử, buộc tên máy chủ

sudo hostname -F /etc/hostname

Bạn có thể vẫn sẽ gặp lỗi tương tự, nhưng hãy thử đăng xuất và đăng nhập lại. Nó hoạt động với tôi.

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.