解决报错:’sudo: unable to resolve host xxx’

操作环境

master@ubuntu:~$ lsb_release -a
No LSB modules are available.
Distributor ID:    Ubuntu
Description:    Ubuntu 16.04.6 LTS
Release:    16.04
Codename:    xenial

报错背景

我在控制台中使用 sudo 提升权限进行一些操作时,回车之后,系统需要经过比平时稍长的时间才会弹出要我输入 ROOT 账户密码的提示,而且正确地输入 ROOT 账户的密码之后,预期的命令并没有执行,而是返回如下的错误提示:

sudo: unable to resolve host ubuntu

例如:

master@ubuntu:~$ sudo cp -p /var/lib/dpkg/status status.bak0
sudo: unable to resolve host ubuntu

解决过程

报错信息的大致含义是“无法解析主机 ubuntu”,其中 “ubuntu” 是我的主机名。我们可以通过 hostname 命令查看当前的主机名:

master@ubuntu:~$ hostname
ubuntu

由于 hostname 命令是从 /etc/hostname 文件中获取到的主机名,因此,直接查看该文件也可以获知当前的主机名:

master@ubuntu:~$ cat /etc/hostname 
ubuntu

如上两次检查都显示当前的主机名是 ubuntu. 根据 Ubuntu 系统以及其他类似 Ubuntu 的系统的特性,这时 /etc/hosts 中也应该有 ubuntu 这个主机名的记录。但是,当我查看 /etc/hosts 这个文件时,却发现其中并没有该记录:

master@ubuntu:~$ cat /etc/hosts
127.0.0.1    localhost
127.0.0.1    v.dhg.wiki

# 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/hosts 是只有 ROOT 权限才能编辑的文件,sudo 目前又不能用,因此只能使用 su root, 由普通用户切换到 ROOT 用户,之后,编辑 /etc/hosts, 写入如下内容:

127.0.0.1    ubuntu

注意:上面命令中的 ubuntu 是我的主机名,你在操作时要替换成自己的主机名。

之后,保存退出。修改完成之后的 /etc/hosts 文件大致是这样的:

master@ubuntu:~$ cat /etc/hosts
127.0.0.1    localhost
127.0.0.1    v.dhg.wiki
127.0.0.1    ubuntu

# 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

之后测试发现 sudo 已经可以正常使用。

至此,问题解决。

EOF

发表评论

电子邮件地址不会被公开。 必填项已用*标注