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

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


我该怎么解决?

评论

请发布/ etc / hostname和/ etc / hosts的内容。

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

确保您的主机名与主机相同。例如主机名是ubuntu-pc,主机是ubuntu-pc必须相同。

我今天遇到了这个。问题是我在主机名中没有的东西在/ 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”
我无法发布答案,因为该问题受到保护,而且我在这里没有足够的声誉。就我而言,我通过重新启动network-manager解决了该问题:sudo /etc/init.d/network-manager restart。但是,我想知道为什么sudo首先浪费时间等待与网络相关的东西。当网络不可用时,sudo不能正常工作吗?

#1 楼

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


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

那个/etc/hosts有一个localhost条目。它应该类似于:

 127.0.0.1    localhost.localdomain localhost
 127.0.1.1    my-machine



如果这些文件之一都不正确(因为您无法使用sudo),则可能必须重新启动使计算机进入恢复模式并进行修改,然后重新启动到通常的环境。

评论


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

– Yashvit
2013年5月5日15:22



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

– Ian M
16年7月17日在20:19

我在Windows中使用Linux子系统,因此遇到了这个问题。遵循您的答案后,问题已解决。

– amarVashishth
16-12-28在15:43

您可能还需要将:: 1本地主机添加到/ etc / hosts(这是127.0.0.1的IPv6版本,又名回送​​地址)

–伍德罗·巴洛
17-9-27在14:51



为什么您的示例具有127.0.0.1 localhost但127.0.1.1 my-machine?

–亚当
17年12月21日在23:11

#2 楼

编辑/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

评论


如果他不能sudo,如何编辑/ etc / hosts文件?除非他用密码创建了一个超级帐户(不好的主意)

–丹尼斯
15年3月29日在22:31

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

– Lekensteyn
2015年3月29日在23:31

有用的答案。

–波恩
6月27日7:25

作为debian用户,没有gksudo或gksu,我不得不求助于sed:步骤1.运行touch myscript步骤2.编辑“ myscript”(大多数情况下您可以在没有sudo的情况下执行此操作)并插入sed -i 's / 127.0.0.1 localhost / 127.0.0.1 localhost NEWHOSTHERE /'/ etc / hosts步骤3. sudo bash myscript。请注意,这些标签是有意使用的,因为它会搜索127.0.0.1本地主机,并将其替换为127.0.0.1本地主机NEWHOSTHERE。

– petrosmm
8月27日20:35



#3 楼

像这样将您的主机名添加到/etc/hosts

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


评论


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

–mwfearnley
18年1月4日在13:59

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

–shivesh suman
18年9月21日在21:05

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

–Ronny Elflein r11lein
19年1月7日,11:31



#4 楼

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

dave00-G31M-ES2L中未表示您的主机名(/etc/hosts)。在此行中添加一个L

127.0.1.1   dave00-G31M-ES2


它变成了: ,打开控制台(按Ctrl + Alt + T)并输入:

127.0.1.1   dave00-G31M-ES2L


添加字母L,并保存并退出。

评论


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

– Jan
2014-09-26 13:54

当不再有sudo时,这里还有一个建议sudo的人。 sudo不起作用,先生。须藤:无法解析主机...

–绿色
16年7月12日在20:18

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

–雷神
16年7月14日在13:49

@Green sudo工作正常。它只是无法存储任何状态(即Lekensteyn在其他地方说过,您每次都必须输入密码)。

– Wlerin
16年7月28日在19:16



如果您在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年8月5日在2:13



#5 楼

在VPS上使用ubuntu时遇到了这个问题。我在/ etc / hosts文件中进行了编辑。

运行以下命令: >
sudo nano /etc/hosts


我希望能解决您的问题:)

PS:请记住重新启动计算机!

评论


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

– Waldir Leoncio
13-10-26在14:33

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

– Jan
2014-09-26 13:55

这个答案与这个旧答案基本不一样吗?

– Dan Dascalescu
6月29日10:20

#6 楼

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

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

#7 楼

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

评论


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

–古怪的长老
2015年1月15日13:56

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

–克里斯·摩尔
2015年7月1日,1:16

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

–马特奥·斯科蒂奇(Mattao Scotuzzi)
16年1月3日,17:32

没有DNS主机名

–绿色
16年7月12日在20:11

#8 楼

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

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


有多种解决方法,其中一种是添加主机名作为/etc/hosts中的本地主机(如其他几个答案所示)。通常这可能是正确的做法,但这并不是唯一可能的解决方法。

外部DNS服务器或类似的服务器可能会提供“完全合格的域名”(如果这样,在您的网络上可用)。在这种情况下,尽管sudo中缺少条目,/etc/hosts也不会发牢骚。在sudoers文件中。请参阅sudo命令尝试搜索主机名。

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

评论


快一些:sudo --host = localhost

– nobar
19年4月15日在23:50

支持尝试搜索主机名链接的sudo命令

–x-yuri
19年10月2日在16:43

这很有趣:Bash挂在Windows 10的Linux子系统中

– nobar
5月11日22:51

#9 楼

我遇到了同样的错误消息。我认为AWS开发人员论坛上的此讨论线程是更好的解决方案:

“转到VPC管理控制台,选择VPC,单击“操作”,选择“编辑DNS主机名”,然后选择“是”。”

https://forums.aws.amazon.com/thread.jspa?messageID=699718

#10 楼

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

在编辑主机名和主机文件并运行sudo service hostname restart直到运行sudo hostname之前,我花了30分钟来解决此错误,即使提示显示的是旧值,我仍然看到主机名是新值。 br />

评论


问题不是终端仿真器,而是缓存了值的shell。

–马克·斯托斯伯格
17年2月16日在19:53

#11 楼

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

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


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

#12 楼

就我而言,这就是问题所在,我将hostname更改为man,因为我想知道是否可以在hostname上使用某些参数。相反,它将我的hostname更改为man,在将主机名改回`localhost之后,我总是收到与您相同的消息

sudo: unable to resolve host (none)


br />
hostname localhost


#13 楼

抱歉,我不能为您提供任何帮助,因为它说“无法解析主机”,请尝试运行:

机。如果不是,则问题是主机配置,而不是sudo。

评论


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

– CKM
17年5月6日在13:22

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

–animaletdesequia
17年5月7日在18:52

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

– CKM
17年5月8日在9:28



#14 楼

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部分,重新​​启动,一切都很好。


#15 楼

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

#16 楼

我有同样的问题!我通过在线管理控制面板更改了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


,它修复了我的错误!希望这对您有所帮助!

#17 楼

我有同样的问题。我通过编辑/ 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 Mar 26 '16 at 18:43

如何不使用sudo编辑/ etc / hosts。 sudo不起作用sudo:无法解析主机...

–绿色
16年7月12日在20:02

#18 楼

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

评论


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

–流浪者
16年8月24日在19:38

#19 楼

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

#20 楼

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


sudo: unable to resolve host


尝试强制使用主机名

sudo hostname -F /etc/hostname


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