错误消息’sudo:无法解析主机’

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

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

我该怎么做才能解决它?

要检查两件事(假设您的机器被称为my-machine ,您可以根据需要进行更改):

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

  2. /etc/hosts有一个localhost条目。 它应该有类似的东西:

      127.0.0.1 localhost.localdomain localhost
      127.0.1.1我的机器
    

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

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

使用/etc/hostname文件中所述的新主机名替换上例中的penguin

将主机名添加到/etc/hosts如下所示:

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

注意,这是与这个问题合并的这个问题的答案。

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

 127.0.1.1 dave00-G31M-ES2 

所以它变成了:

 127.0.1.1 dave00-G31M-ES2L 

要完成此操作,请打开控制台(按Ctrl + Alt + T )并键入:

 sudo gedit /etc/hosts 

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

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

运行此命令:

 sudo nano /etc/hosts 

然后添加:

 127.0.0.1 localhost.localdomain localhost 127.0.1.1 ubuntu 

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

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

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

我的主机名是“staging_1”。 事实certificate,您的主机名中不能有下划线,这就是我收到此错误的原因。 将下划线更改为连字符解决了我的问题。

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

我遇到了同样的错误消息。 我认为AWS Developer Forums的讨论主题是一个更好的解决方案:

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

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

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

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

在我的情况下,这是问题,我将hostname更改为man因为我想知道是否有一些参数可以在hostname使用。 相反,它将我的hostname更改为man ,我总是得到像你一样的消息

 sudo: unable to resolve host (none) 

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

 hostname localhost 

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

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

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

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


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

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

抱歉,我帮不了你,但是,因为它说“无法解析主机”尝试运行:

 hostname 

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

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

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

我有同样的问题! 我通过在线管理员控制面板改变了我的VPS名称,该控制面板没有更改主机文件中的机器名称我所做的全部运行:

 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 

并修复了我的错误! 希望这有帮助!

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

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

别名在bash脚本中不起作用,但我们可以使用变量: sudo='sudo -h 127.0.0.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 

如果你不能sudo你可以通过su以root身份登录。 IE:su root(x-term)。 然后在提示时提供root密码,然后您可以使用nano编辑文件。 ‘buntu中的root密码与用于sudo的密码相同。

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