错误消息“ sudo:无法解析主机(无)”


737

当我运行时sudo,终端卡住了几秒钟,然后输出一条错误消息。我的终端看起来像这样:

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

我该怎么解决?


2
请张贴的内容/etc/hostname/etc/hosts
安排

48
我建议不要过于局限性地关闭此问题。许多用户可能会错误地认为他们在hosts文件中输入了一个名称,但改用了另一个名称,尤其是在许多网络上,计算机的名称都与此类似。当有人搜索该问题时,将显示此问题(和答案),并且答案将促使他们检查此类差异,即使确切的拼写错误会有所不同。
伊利亚·卡根

9
确保hostname与相同hosts。例如,主机名是ubuntu-pc,主机是ubuntu-pc必须相同。
Muhammad Sholihin

1
我今天遇到了这个。问题是我在主机名中没有的东西在/ etc / hosts中。例如:$主机名=>'mybox'$ grep'mybox'/ etc / hosts => 192.168.1.2 mybox.example.com。我需要在/ etc / hosts => 192.168.1.2 mybox.example.com mybox中的域名之后添加“ mybox”-Ray
Ray

3
我无法发布答案,因为该问题受到保护,而且我在这里没有足够的声誉。就我而言,我通过重新启动network-manager:解决了该问题sudo /etc/init.d/network-manager restart。但是,我想知道为什么首先sudo浪费时间等待与网络相关的东西。sudo当网络不可用时,不能没有问题地工作?
bli

Answers:


999

要检查两件事(假设您的计算机名为my-machine,您可以适当地更改此设置):

  1. /etc/hostname文件仅包含计算机的名称。

  2. /etc/hosts有一个条目localhost。它应该具有以下内容:

     127.0.0.1 localhost.localdomain本地主机
     127.0.1.1我的机器
    

如果这两个文件都不正确(由于无法使用sudo),则可能必须将计算机重新引导到恢复模式并进行修改,然后重新引导到通常的环境。


31
主机名将不会更改,直到您重新启动。如果您希望在不重新启动计算机的情况下进行更改,请按照上述步骤进行操作,然后运行:-“ sudo hostname my-machine”,以查看其是否有效运行“ sudo hostname”,它将显示您计算机的主机名。此方法也可以用作更改主机名的临时方法。重新启动后,将使用/ etc / hostname文件中的值。
Yashvit 2013年

2
注意:由于您不能以sudo开头,因此很难编辑这些文件。我的解决方案是我能够以某种方式将sudo visudo更改#%admin ALL=(ALL) ALL%admin ALL=NOPASSWD: ALL,然后重新启动,然后使用sudo su-编辑这些文件,设置/纠正主机名,再次重新启动,然后一切正常。
伊恩·M

4
我在Windows中使用Linux子系统,并且遇到了这个问题。遵循您的答案后,问题已解决。
amarVashishth '16

2
您可能还需要添加::1 localhost/etc/hosts(这是127.0.0.1的IPv6版本,又名回送​​地址)
Woodrow Barlow

11
为什么你的例子有127.0.0.1 localhost,但127.0.1.1 my-machine
亚当

193

编辑 /etc/hosts新的主机名并将其附加到127.0.0.1行(如果愿意,可以创建新行)。

我的看起来像:

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

penguin在上述示例中,用/etc/hostname文件中所述的新主机名替换。


2
如果他不能sudo,如何编辑/ etc / hosts文件?除非他使用密码创建了一个非法帐户(坏主意)
丹尼斯

9
@Dennis sudo即使显示该消息,您仍然可以执行。IIRC您仍然需要在每次调用时输入密码。如果这不起作用,则可以重新启动到故障恢复控制台并应用更改。不建议使用带有密码的root帐户。
Lekensteyn

68

添加您的主机名,/etc/hosts例如:

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

2
这很聪明,但是我认为自动化这样的事情并不是一个好主意。
mwfearnley

1
这会将主机名追加到hosts文件。有一个固有的假设,即回送ip到localhost的映射和文件末尾之间没有任何内容,但是现在此行和文件末尾之间有一些IPv6内容,在这种情况下,此解决方案并没有最终为您提供你想要什么。相关评论:编辑此文件或其他文件需要使用sudo,而我们正在尝试修复它。我们仍然需要能够运行sudo。在这种情况下,可以使用sudo -h主机名来首先更改文件的权限或获取权限以对其进行编辑。
shivesh suman

1
这失败了,因为我无法“ sudo tee ..”,但这成功了: echo $(hostname -I | cut -d\ -f1) $(hostname) | sudo -h 127.0.0.1 tee -a /etc/hosts
Ronny Elflein r11lein

31

请注意,这是对此问题的答案,已与该问题合并。

您的主机名(dave00-G31M-ES2L)未用表示/etc/hostsL在此行添加一个:

127.0.1.1   dave00-G31M-ES2

这样就变成了:

127.0.1.1   dave00-G31M-ES2L

为了完成此任务,请打开一个控制台(按Ctrl+ Alt+ T)并输入:

sudo gedit /etc/hosts

L如前所述添加字母,保存并退出。


10
记得!使用sudoedit(或sudo -e)。要指定首选的编辑器,请使用EDITOR环境变量(例如export EDITOR=vim),因为它会创建脱机副本以进行编辑,然后在编辑后彻底覆盖。
1

2
这里还有一个建议sudo什么时候不再出现了sudosudo长官不行 sudo: unable to resolve host ...
2016年

@格林:不sudo?您提到的错误消息来自sudo命令。也许您的意思有所不同?
雷神

@格林sudo工作得很好。它只是无法存储任何状态(例如,正如Lekensteyn在其他地方所说的,您每次都必须输入密码)。
沃林

4
如果您在W10的Bash上遇到此问题,并从Google那里提出了这个问题,那么这对我来说就是一个答案。我将127.0.0.1更改为“ 127.0.0.1 localhost DESKTOP-SLQK4CV”(通过执行“ sudo vim / etc / hosts”(针对vim新手的快速提示:在键入切换到插入模式之前按i,按esc退出)那,写“:wq”保存并退出,或写“:q!”退出而不保存),在我的情况下,sudo起作用了,只是说它无法连接到DESKTOP-SLQK4CV),它开始为我工作。
大道

16

在VPS上使用ubuntu时遇到了这个问题。我解决了编辑/ etc / hosts文件的问题。

运行以下命令:

sudo nano /etc/hosts

然后添加:

127.0.0.1   localhost.localdomain localhost
127.0.1.1   ubuntu

希望能解决您的问题:)

PS:切记重新启动计算机!


1
另外,请查看您的设备名称(在@符号后打印在终端标题栏上)是否与hosts文件第二行上的名称匹配(在Luca的示例中为“ ubuntu”)。第一行也可能只是“ localhost”。
Waldir Leoncio

2
记得!使用sudoedit(或sudo -e)。要指定首选的编辑器,请使用EDITOR环境变量(例如export EDITOR=vim),因为它会创建脱机副本以进行编辑,然后在编辑后彻底覆盖。
2014年

11

即使我的/ etc / hostname文件和/ etc / hosts文件中的主机名匹配,我也遇到了同样的问题。

我的主机名是“ staging_1”。原来,您的主机名中不能包含下划线,这就是为什么我收到此错误的原因。将下划线更改为连字符可解决我的问题。


11

在AWS中,转到您的vpc并打开“ DNS主机名”。


2
欢迎来到askubuntu!您可以对此进行扩展吗?尚不清楚您的意思(至少对我来说是什么意思。)
Elder Geek

2
这是帮助我的答案。自上次查看以来,Amazon AWS发生了变化。VPC具有DNS选项,需要先打开它们,然后才能进行任何DNS解析。
克里斯·摩尔

1
(例如)在vpc条目的右键菜单中可以找到“启用DNS主机名”选项
Matteo Scotuzzi

没有DNS Hostnames
绿色

7

问题中给出的症状可能与以下更具体的问题密切相关:

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

有多种解决方法,其中一种是将您的主机名添加为localhost /etc/hosts(如其他几个答案所示)。一般而言,这可能是正确的做法,但这并不是唯一可能的解决方案。

外部DNS服务器或类似的服务器可能会提供“完全合格的域名”(如果网络上可用)。在这种情况下,sudo尽管中缺少,也不会抱怨/etc/hosts


注意:sudo由于sudoers文件中的可选功能,即使不一定需要也要尝试取消引用主机名。请参阅sudo命令尝试搜索主机名

只要延迟不太长,此错误消息通常是无害的。


快一点:sudo --host=localhost
nobar



5

在关闭并重新启动模拟器之前,某些终端模拟器不会使用正确的主机名更新提示(我正在与您交谈的是lxterminal)。

编辑主机名主机文件并运行sudo service hostname restart直到我运行sudo hostname并看到主机名是新值(即使提示显示的是旧值)后,我还是花了30分钟的时间来解决此错误。


1
问题不是终端仿真器,而是缓存了值的shell。
Mark Stosberg '17

4

就我而言,这是问题所在,我将更改为hostnameman因为我想知道是否可以在上使用某些参数hostname。取而代之的是,我hostname变成了man和我一样的信息

sudo: unable to resolve host (none)

将主机名更改回`localhost后,一切再次正常

hostname localhost

3

每个人都建议修改/etc/hosts。但是在某些情况下,这可能是不可能的(例如,在Docker容器内部)。因此,我必须找到一种更好的方法,然后我想到了:

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

别名在bash脚本中不起作用,但是我们可以使用变量: sudo='sudo -h 127.0.0.1'


2

抱歉,我无济于事,因为它说“无法解析主机”,请尝试运行:

hostname

并查看输出是否是计算机的主机名。如果不是,则问题是主机配置,而不是sudo。


我这样做得到了我的机器的主机名。我在/ etc / hosts中也有条目。我仍然遇到错误。
chandresh'5

更改主机文件后您是否重新启动了计算机?
animaletdesequia

否。尽管我的IT团队说过puppetlabs的锁定文件和gpg密钥存在问题。现在,它解决了而没有重新启动
。.– chandresh

2

OP写道:

全部都在/ etc / hostname中。在我们两个有病的服务器上,它看起来像这样:

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

在没有此问题的服务器上,我们有:

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

删除该linux-web-n部分,重新​​启动,一切都很好。


2

如果您的主机或主机名文件包含非法字符,则可能会出错。仅允许使用以下符号:az,AZ,0-9


2

我有同样的问题!我通过在线管理控制面板更改了VPS的名称,该面板未更改hosts文件中的计算机名称,我所做的全部都已运行:

sudo nano /etc/hosts

然后,我对此进行了编辑:

127.0.1.1 Megabyte Megabyte
127.0.0.1 localhost

对此:

127.0.1.1 Debian Debian
127.0.0.1 localhost

这解决了我的错误!希望这对您有所帮助!


1

我有同样的问题。我通过编辑/ etc / hosts文件上的/ etc / hosts和/ etc / hostname文件来解决它,只需编辑顶部,如下所示。

#vi /etc/hosts
    127.0.0.1   localhost
    127.0.1.1   localhost  myhostname




#vi /etc/hostname
    myhostname

127.0.1.1 localhost myhostname还是127.0.1.1 myhostname
Mostafa Ahangarha '16

2
你怎么可以编辑/etc/hosts没有sudosudo不起作用sudo: unable to resolve host ...
绿色

1

如果您不能sudo,则可以通过su以root用户身份登录。IE:su root(在x术语中)。然后在出现提示时输入root密码,然后您可以使用nano编辑文件。'buntu中的根密码与用于sudo的密码相同。


5
Ubuntu中的root密码与的密码不同sudoroot是其自己的帐户,默认情况下未设置密码。
TheWanderer

1

如果您使用的是Vagrant,请登录来宾并运行 apt-get --no-install-recommends install virtualbox-guest-utils


0

如果您的问题是该/etc/hostname文件和/etc/hosts,则两个文件都具有所需的主机名,而您的计算机仍显示错误

sudo: unable to resolve host

尝试,强制主机名

sudo hostname -F /etc/hostname

您可能仍然会遇到相同的错误,但是尝试注销并重新登录。它对我有用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.