$ curl http://google.de # DNS resolution works fine
...
$ sudo curl http://google.de
curl: (6) Couldn't resolve host 'google.de'
$ echo $http_proxy
http://proxy:8080
$ cat /etc/hosts
127.0.0.1 localhost.localdomain localhost
127.0.1.1 debian
# ip6-stuff below
$ hostname
debian
我在 VirtualBox 中使用 Debian squeeze (LXDE),可以通过真正的 root 控制台或通过 执行管理工作su root
。我将我的用户添加到 sudoers 组,并且可以通过 sudo 执行编辑等操作,例如sudo vim /etc/hosts
。我想使用sudo
而不是su root
。
为什么curl
(和其他类似的工具aptitude
) 无法解析主机名,但是当以普通用户或普通 root 身份使用它们时一切正常?
编辑:以下是解决方案(感谢 Paul):
$ sudo visudo
# add this line
Defaults env_keep = "http_proxy https_proxy ftp_proxy"
# above this line
Defaults env_reset
答案1
当您运行 sudo 时,您将以 root 身份运行一个新的 shell,并在其中执行命令。只有 /etc/sudoers 文件中的环境变量会被复制到新的 shell 中。
要解决这个问题,你可以执行一个命令
sudo env http_proxy=$http_proxy curl http://google.de
或者你可以编辑 /etc/sudoers(使用 visudo!)并添加
Defaults env_keep = http_proxy
这将自动传递变量。