如何在命令行中通过代理运行“ sudo apt-get update”?


Answers:


91

在某些发行版中,sudo的配置方式使得在运行命令时所有环境变量都被清除。要保留您的http_proxy的值并解决此问题,您需要编辑/ etc / sudoers,运行:

visudo

然后找到以下内容:

Defaults env_reset 

然后添加:

Defaults env_keep = "http_proxy ftp_proxy" 

事情将会按预期开始。

感谢Ubuntu论坛中的kdogksu为该问题找到解决方案

为了不仅修复apt-get,而且还修复图形化的X11实用程序,例如synaptic,mintintall,...),下面的行/etc/sudoers应该可以完成此工作:

Defaults env_keep = "http_proxy https_proxy ftp_proxy DISPLAY XAUTHORITY"

7
是否也需要添加“ https_proxy”?
TenLeftFingers 2014年

2
$出口HTTP_PROXY =“ 用户名:密码@代理服务器:端口 ”,如果您的密码包含特殊字符- cyberciti.biz/faq/...
亚历Punnen

2
应该在“ env_reset”之后添加“ env_keep”或将其放置在原处?他们看起来彼此相对,所以保持两者有道理吗?
罗德里戈

默认值env_keep =“ http_proxy https_proxy ftp_proxy DISPLAY XAUTHORITY”对我有用!谢谢 !-
罗纳德·

1
经过大量浏览后偶然发现。这解决了我的问题。
Sudipta Basak

39

用这个。

ubuntu@ubuntu:~$ cat /etc/apt/apt.conf
Acquire::http::Proxy "http://Username:Password@proxy.foo.bar.edu.au:8080";

这就是我用的。完美运作。

Apt还允许将各个设置放置在下的文件中/etc/apt/apt.conf.d/,因此具有与上述完全相同的效果,但是如果.conf文件中还有其他行,则可能更易于维护:

ubuntu@ubuntu:~$ cat /etc/apt/apt.conf.d/05proxy
Acquire::http::Proxy "http://Username:Password@proxy.foo.bar.edu.au:8080";

5
我建议对其进行编辑,以解释如何将该行添加到配置文件中。尝试在命令行上运行这些行将不会执行此操作。目前,此答案基于正确的想法,但对新手没有帮助。甚至还不是很清楚,您是在说应将行添加apt.conf
伊利亚·卡根

太棒了!!! 作品如魅力
Shantanu Bedajna

在我的系统上,我必须在/etc/apt/apt.conf.d下创建一个文件,但细节很小-效果很好
dldnh

1
@dldnh:您可以创建文件,/etc/apt/apt.conf也可以使用将配置文件放置在/etc/apt/apt.conf.d...中。:-)
保罗·卡拉布罗

不要忘记分号,否则您会得到E: Syntax error /etc/apt/apt.conf:2: Extra junk at end of file
Florian Castellane

18

对我有用的是:

sudo http_proxy=http://yourserver apt-get update

这有点奇怪,因为仅导出http_proxy然后运行sudo echo $ http_proxy乖乖地打印了导出的值


1
$http_proxy在sudo运行之前被扩展。
杰里米·李斯特

1
这在Dockerfile中效果很好!
Cory Ringdahl,

如果需要,请不要忘记代理的端口:)
Gilad Peleg

11
export http_proxy=http://proxyusername:proxypassword@proxyaddress:proxyport
sudo apt-get update

导出不需要sudo输入,如果您的代理是匿名的,则将其proxyusername:proxypassword@丢弃。


:-(,我收到错误消息“拒绝访问Web代理服务!”
Renjith G 2010年

相同的代理服务器设置是否可用于诸如以下的简单操作wget
奥利(Oli)

是的..重复同样的错误...
Renjith G

2
用Acquire :: http :: Proxy“ MYDOMAIN \ MYNAME:MYPASS@MY.PROXY.COM:MYPORT” 编辑/etc/apt/apt.conf怎么样?
Renjith G

您也可以将其添加到〜/ .bashrc中。但是,可怕的安全风险。
Scaine 2010年

3

如果是临时配置,则可以尝试以下方法:sudo bash -c'http_proxy =“ http:// <proxy_host>:<proxy_port> /” apt-get update“

您需要这样做,因为需要为“ root”帐户定义环境变量。之前执行导出操作不起作用。

对于永久配置,您将必须修改系统文件。在以下有关如何检查网络代理是否确实适用的答案中已经对此进行了描述


:-(,我收到错误消息“拒绝访问Web代理服务!”
Renjith G 2010年

您可能必须输入登录名和密码,对吗?如果是这样,http_proxy的格式应为“ http:// <用户>:<通过> @ <主机>:<端口> /”
惠更斯(Huygens)2010年

3

Ubuntu非常难以验证代理。我在工作时使用一台Ubuntu笔记本电脑,破损的数量令人难以置信。

Synaptic,Apt,Firefox,Chromium等都使用不同的方法来指定代理,并且无处安全地指定凭据。

关于这个问题的一些错误:https : //bugs.edge.launchpad.net/ubuntu/+source/msttcorefonts/+bug/220070

https://bugs.edge.launchpad.net/ubuntu/+source/apt-cacher/+bug/198138

https://bugs.edge.launchpad.net/ubuntu/+source/apt/+bug/433827

https://bugs.edge.launchpad.net/ubuntu/+source/b43-fwcutter/+bug/683630

奥利(Oli)建议使用出口是这样做的唯一隐约安全的方法。如果代理服务器使用辅助身份验证以最大程度地减少主身份验证服务器(例如Active Directory)上的负载,有时还可能会“模糊”代理支持。在这里,第一个代理连接由代理针对AD进行身份验证,然后在设置的时间段(通常为5分钟)内,将所有其他连接“信任”为该用户。因此,您可以打开Firefox,浏览Internet(任何地方都可以),然后通过指定代理尝试使用实用程序(wget,突触等),但将用户名保留为空白。

通常,Ubuntu对任何公司环境都怀有敌意,仅因为它允许如此轻松地读取密码。Seahorse是主要的罪魁祸首,但是Network Manager也令人震惊-连接到任何经过PEAP身份验证的网络,您刚刚将密码存储在applet中,任何人都可以看到谁可以借用您的笔记本电脑。显然,笔记本电脑共享被视为Linux领域的牺牲品,因为Seahorse开发人员拒绝了有关安全性的声明。之后,我没有联系网络管理员开发人员的心。


我建议使用cntlm来解决此问题。它使用AD进行身份验证,并且您将所有代理设置都设置为使用127.0.0.1,而无需任何凭据。
laz 2014年

如果需要通过另一台计算机进行身份验证,则需要存储密码明文。“加密”不会增加任何安全性,因为加密密钥需要存储在同一设备上才能使密码可用。
杰里米·李斯特

杰里米(Jeremy),您采用的安全性与海马开发人员相同。我并不是说要使这些东西变得不可能,只是让它变得困难。现在,从未锁定的Ubuntu笔记本电脑中窃取凭据是微不足道的-可能只需单击五下就可以了。Windows并非如此-仍然可能,但是即使我也不知道该怎么做。没有简单的方法可以在10分钟内从Windows计算机中提取密码,否则您可能会意外使工作站解锁。在Ubuntu中做同样的事情,您最好也辞职。这还不够好。
Scaine

3

您尝试编辑/etc/apt/apt.conf吗?我用它来在我们的公司代理后面使用apt。

Acquire::http::proxy "http://user:password@host:port/";

我相信除非您的shell环境中定义了$ http_proxy,否则apt将使用此值(即$ http_proxy优先)。


我不确定apt.conf是否仍在使用...当我从8.04更新到10.04时,我最终无法进行更新,直到摆脱了该文件中的代理设置-然后Synaptic中设置的代理设置开始重新工作...
小贾瓦

奇怪-我将apt.conf与10.04一起使用。我发现此文件中的设置与Synaptic软件包管理器首选项gui中配置的设置不同。
乔恩·布雷特

1
是的,apt.conf仍应使用。您可以使用来查看apt认为已设置的配置设置apt-config dump
史蒂夫·比蒂

0

如果您想通过代理在命令行中运行“ sudo apt-get update”,请使用以下命令,

sudo apt-get -o Acquire::http::proxy="http://user:password@host:port/" update;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.