如果这是一个基本问题,请原谅,我最近接管了我们部门的内部服务器,因此我不得不处理超出我(非常基本的)知识范围的问题。
语境
我们的服务器位于企业网络上,需要企业代理身份验证(例如输入企业用户名和密码)。该网络上的 Windows 机器上不存在此问题 - 当打开 Web 浏览器时,系统会提示用户进行身份验证。但是,当在 Linux 上使用浏览器时,系统不会提示用户进行身份验证,浏览器只会显示一条消息,提示需要进行身份验证。
问题 1 - 互联网接入很有用
目前,如果我需要查找某些内容,我必须走到另一层楼的办公桌上,因为我无法通过这台机器访问互联网,因为我无法*(*不知道如何)进行身份验证。如果能够进行身份验证,我可以使用网络浏览器,这将非常有用。
问题 2 - 软件包无法更新
当我尝试使用sudo apt-get update
或执行更新时sudo apt-get install [package]
,出现错误,我认为这些错误是由于缺乏身份验证造成的。
执行后sudo apt-get update
,我收到如下错误W: Failed to fetch [link] 401 Authorization Required
。(由于某种原因,一些http://us.archive.ubuntu.comtrusty/ 源工作正常,但有些会抛出相同的错误)。
这是一个大问题,因为我需要能够更新服务器上的软件包。
采取的措施
- 我已经通过
sudo apt-get install cntlm
(它是从少数几个随机工作的 ubuntu 存储库之一运行的)安装了 cntlm。 - 我编辑了配置
/etc/cntlm.conf
并添加了我的用户名、域和代理。 - 我启动了该服务(
sudo /etc/init.d/cntlm start
) - 我测试了该服务(
sudo cntlm -I -M http://www.google.com/
),响应是Config Profile 1/4... Auth not required (HTTP code: 307) Your proxy is open, you don't need another proxy.
- 我尝试
sudo apt-get update
再次执行但仍然收到相同的错误消息。(401 Authorization Required
) - (哎呀!我错了!我发现我需要手动配置 apt 代理设置......)
- 我将该行添加
Acquire::http::Proxy "http://localhost:3128";
到/etc/apt/apt.conf
。 - 我重新开始吧
cntlm
。(sudo /etc/init.d/cntlm stop
,sudo /etc/init.d/cntlm start
)
- 我表演了
sudo apt-get update
……然后它就击中了0% [Waiting for headers] [Waiting for headers] [Waiting for headers] [Waiting f
——然后就停在了那里。 - 我
sudo apt-get clean
在表演之前表演过sudo apt-get update
- 它开始起作用然后停止了19% [Waiting for headers]
- 我
sudo apt-get clean
在表演之前又表演了一次sudo apt-get update
- 它开始起作用然后停在0% [Waiting for headers]
- 我第三次尝试了(
sudo apt-get clean
,sudo apt-get update
),它停在20% [Waiting for headers]
- 我研究了这个后续问题并发现AskUbuntu 上的答案这表明这可能是 IPv6 的问题,导致 ICS 在接收并发连接时暂停一段时间。
- 我检查了该
/etc/sysctl.conf
文件,发现 IPv6 似乎已被禁用......(行net.ipv6.conf.all.disable_ipv6 = 1
、net.ipv6.conf.default.disable_ipv6 = 1
和net.ipv6.conf.lo.disable_ipv6 = 1
已经在配置文件中。) - (我现在有点想不通!症状与假设的 IPv6 问题相符,但是如果它已被禁用,这似乎不可能是原因)
- 我第四次
sudo apt-get clean
表演sudo apt-get update
(怎么回事——为什么不呢?)这次它挂了24% [Waiting for Headers]
,但首先它影响了一堆存储库。一个曾经触发错误的存储库现在不会再触发错误了 (http://cran.rstudio.com trusty /
),但一个曾经触发错误的存储库现在触发了另一个错误,Received HTTP code 501 from proxy after CONNECT
。
答案1
您必须告诉 apt-get 使用您的代理。在 shell 中,输入:
导出 _http_proxy=htp://用户:密码@代理服务器:端口 apt-get 更新
如果有效的话,您可以使更改持久化:
修改 /etc/apt/apt.conf.d/proxy
进而
获取::http::Proxy "htp://用户:密码@代理服务器:端口";