sudo
时,终端卡住了几秒钟,然后输出了一条错误消息。我的终端看起来像这样:ubuntu@(none):~$ sudo true
sudo: unable to resolve host (none)
我该怎么解决?
#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
您可能仍然会遇到相同的错误,但是尝试注销并重新登录。它对我有用。
评论
请发布/ 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不能正常工作吗?