我在工作中使用 Ubuntu 虚拟机。我之前使用时没有遇到任何问题,但有一个更新要求所有出站连接都使用我们的内部用户名和密码进行身份验证。
当我在我的机器上使用浏览器时,这不是一个问题,我可以简单地输入我的凭据然后继续,但是当我运行apt-get update
(或任何这样的命令)时,我会遇到失败:
W: Failed to fetch http://us.archive.ubuntu.com/ubuntu/dists/precise-backports/universe/source/Sources 401 Authorization Required [IP: 91.189.91.14 80]
W: Failed to fetch http://us.archive.ubuntu.com/ubuntu/dists/precise-backports/multiverse/source/Sources 401 Authorization Required [IP: 91.189.91.14 80]
有什么方法可以让我apt-get
停止并要求我在授权请求进入时输入我的凭据,而不是直接失败?我在帮助页面中找不到有关此问题的任何选项:
Options:
-h This help text.
-q Loggable output - no progress indicator
-qq No output except for errors
-d Download only - do NOT install or unpack archives
-s No-act. Perform ordering simulation
-y Assume Yes to all queries and do not prompt
-f Attempt to correct a system with broken dependencies in place
-m Attempt to continue if archives are unlocatable
-u Show a list of upgraded packages as well
-b Build the source package after fetching it
-V Show verbose version numbers
-c=? Read this configuration file
-o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp
答案1
您可以为 apt 配置代理。
sudo nano /etc/apt/apt.conf.d/proxy.conf
根据您的代理服务器添加下面一行的值并保存。
Acquire::http::Proxy "http://user:[email protected]:port/";
尝试运行sudo apt update
它就可以工作。
答案2
它很丑陋并且不安全,但是你可以。
看此网页有关如何设置 apt-get 以使用需要身份验证的 http 代理的说明;特别是标有“如何登录代理用户”的部分。
还有apt-get 无法与代理配合使用,其中概述了另一种方法,但它们都存在同样的问题。
您的用户名和密码被硬编码在某处。
另一种方法是,您可以为 apt-get 编写一个小型 shell 脚本包装器,它会要求您输入用户名和密码,并且只在内存中设置环境变量。这仍然不安全,因为可以检查进程内存,但比将其硬编码在文件中要安全一些。
#!/bin/bash
read -p "Username: " username
read -s -p "Password: " password
export http_proxy=http://${username}:${password}@yourproxyaddress:proxyport
sudo apt-get "$@"
不幸的是,我认为 apt-get 中没有任何内置功能可以为您处理这个问题。