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

Kit*_*nde 882 sudo error-handling

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

ubuntu@(none):~$ sudo true
sudo: unable to resolve host (none)
Run Code Online (Sandbox Code Playgroud)

我能做些什么来解决它?

Jer*_*err 1197

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

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

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

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

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

  • 在您重新启动之前,主机名不会更改。如果您想在不重新启动机器的情况下更改它,请按照上述步骤操作,然后运行:-“sudo hostname my-machine”以查看是否有效运行“sudo hostname”它将显示您机器的主机名。此方法也可用作更改主机名的临时方法。重新启动后,将使用 /etc/hostname 文件中的值。 (41认同)
  • 为什么你的例子有“127.0.0.1 localhost”但有“127.0.1.1 my-machine”? (15认同)
  • 我在 Windows 中使用 Linux 子系统,我遇到了这个问题。按照你的回答,已经解决了。 (4认同)
  • 注意:由于您无法开始使用 sudo,因此很难编辑这些文件。我的解决方案是我能够以某种方式 sudo visudo 并将 `#%admin ALL=(ALL) ALL` 更改为 `%admin ALL=NOPASSWD: ALL`,然后重新启动,然后 sudo su -,编辑这些文件,设置/更正主机名,再次重启,一切正常。 (2认同)
  • 您可能还需要将 `::1 localhost` 添加到 `/etc/hosts`(这是 127.0.0.1 的 IPv6 版本,又名环回地址) (2认同)
  • 就我而言,原因是“hostnamectl set-hostname ...”更改了“/etc/hostname”**但没有“/etc/hosts”**。 (2认同)

Lek*_*eyn 223

编辑 /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
Run Code Online (Sandbox Code Playgroud)

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

  • @Dennis 即使显示该消息,您仍然可以执行 `sudo`。IIRC 你仍然需要在每次调用时输入你的密码。如果这不起作用,您可以重新启动到恢复控制台并应用更改。不鼓励使用带有密码的 root 帐户。 (11认同)
  • 如果他不能 sudo,他如何编辑 /etc/hosts 文件?除非他用密码创建了一个 rood 帐户(坏主意) (4认同)

Col*_*son 79

添加您的主机名,/etc/hosts如下所示:

echo $(hostname -I | cut -d\  -f1) $(hostname) | sudo tee -a /etc/hosts
Run Code Online (Sandbox Code Playgroud)

  • 这很聪明,但我认为自动化这样的事情往往不是一个好主意。 (7认同)
  • 这失败了,因为我不能“sudo tee ..”,但这做到了:`echo $(hostname -I | cut -d\ -f1) $(hostname) | 须藤 -h 127.0.0.1 tee -a /etc/hosts ` (3认同)

Tho*_*hor 36

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

您的主机名 ( dave00-G31M-ES2L) 未在/etc/hosts. 添加L到这一行:

127.0.1.1   dave00-G31M-ES2
Run Code Online (Sandbox Code Playgroud)

所以就变成了:

127.0.1.1   dave00-G31M-ES2L
Run Code Online (Sandbox Code Playgroud)

为了实现这一点,打开一个控制台(按Ctrl+ Alt+ T)并输入:

sudo gedit /etc/hosts
Run Code Online (Sandbox Code Playgroud)

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

  • 记住!使用`sudoedit`(或`sudo -e`)。要指定首选编辑器,请使用 `EDITOR` 环境变量(例如 `export EDITOR=vim`),因为它会创建用于编辑的离线副本,然后在编辑后干净利落地覆盖。 (11认同)
  • 如果您在 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)并且它开始为我工作。 (4认同)
  • 当不再有 `sudo` 时,这里还有另一个人建议使用 `sudo`。`sudo` 不起作用,先生。`sudo:无法解析主机......` (2认同)

Luc*_*ico 19

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

运行这个命令:

sudo nano /etc/hosts
Run Code Online (Sandbox Code Playgroud)

然后添加:

127.0.0.1   localhost.localdomain localhost
127.0.1.1   ubuntu
Run Code Online (Sandbox Code Playgroud)

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

PS:记得重启电脑!

  • 另外,查看您的设备名称(打印在终端标题栏 @ 符号之后)是否与 `hosts` 文件第二行的名称(Luca 示例中的“ubuntu”)匹配。第一行也可能只是“localhost”。 (2认同)
  • 记住!使用`sudoedit`(或`sudo -e`)。要指定首选编辑器,请使用 `EDITOR` 环境变量(例如 `export EDITOR=vim`),因为它会创建用于编辑的离线副本,然后在编辑后干净利落地覆盖。 (2认同)

小智 14

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

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


小智 11

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

  • 欢迎来到 askubuntu!你能扩展一下吗?你的意思不是很清楚(至少对我来说)。 (2认同)
  • 这是帮助我的答案。自从我上次查看 Amazon AWS 以来,它发生了变化。VPC 具有 DNS 选项,并且需要在任何 DNS 解析工作之前打开它们。 (2认同)

nob*_*bar 10

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

$ hostname --fqdn
hostname: Temporary failure in name resolution
Run Code Online (Sandbox Code Playgroud)

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

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


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

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

  • 更快一点:`sudo --host=localhost` (2认同)

小智 6

我遇到了同样的错误消息。我认为 AWS 开发人员论坛上的这个讨论主题是一个更好的解决方案:

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

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


小智 6

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

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


小智 6

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

echo "alias sudo='sudo -h 127.0.0.1'" >> ~/.bash_aliases
source ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

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


小智 5

就我而言,这是问题所在,我将其更改为hostnameman因为我想知道是否有一些参数可以在hostname. 相反,它改变了我hostnameman,我总是收到和你一样的消息

sudo: unable to resolve host (none)
Run Code Online (Sandbox Code Playgroud)

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

hostname localhost
Run Code Online (Sandbox Code Playgroud)