错误消息’sudo:无法解析主机’
当我运行sudo
,终端卡住了几秒钟然后输出错误信息。 我的终端看起来像这样:
ubuntu@(none):~$ sudo true sudo: unable to resolve host (none)
我该怎么做才能解决它?
要检查两件事(假设您的机器被称为my-machine
,您可以根据需要进行更改):
-
/etc/hostname
文件只包含计算机的名称。 -
/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主机名“,然后选择”是“。
在您关闭并重新启动模拟器之前,某些终端模拟器不会使用正确的主机名更新提示(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