在管理公司内网服务器或处于复杂网络环境时,我们经常会遇到服务器本身无法直接访问外网,但手里正好有一个代理IP可用(例如内网某台机器开放了代理端口)。
今天在给 Ubuntu 服务器安装 p7zip-full 时,就遇到了这样一个经典报错:
Err:1 http://cn.archive.ubuntu.com/ubuntu jammy/universe amd64 p7zip amd64 16.02+dfsg-8
Cannot initiate the connection to cn.archive.ubuntu.com:80 ... - connect (101: Network is unreachable) Could not connect to cn.archive.ubuntu.com:80 ... connection timed out
很明显,服务器连不上 Ubuntu 的官方镜像源。如果你手里刚好有一个临时代理(假设为 192.168.6.6:6016),你可能会想着直接挂上代理解决。但是,很多朋友会发现,即使自己在终端设置了代理,用 sudo apt-get 时依然会超时!
这是为什么呢?今天就来分享两种最实用、最干净的临时代理使用方法。
为什么你配置的代理在 sudo 下失效了?
很多开发者习惯用 export http_proxy=... 来设置终端代理。但当你使用 sudo 提权来执行 apt-get 安装命令时,处于系统安全策略考虑,sudo 默认会重置和隔离当前用户的环境变量。
这就导致了你明明设置了代理,apt-get 却像没头苍蝇一样依然去直连外网,最终惨遭 Timeout。
为了保持环境的纯洁性(不修改全局配置文件,做到真正的“临时一次性”),我们可以使用以下两种方法:
方法一:使用 -o 参数单次指定(⭐️ 最推荐)
这是最安全且最符合“临时使用”初衷的方法。你可以利用 apt-get 的 -o(Option)参数,在运行命令的瞬间强行塞入代理配置。
以安装 p7zip-full 为例,只需执行:
sudo apt-get -o Acquire::http::Proxy="http://192.168.61.61:63106/" -o Acquire::https::Proxy="http://192.168.61.61:63106/" install p7zip-full -y
优点: * 绝对的“一次性”,命令执行完毕后,系统不留任何痕迹。
- 不会影响系统里的其他服务或后续操作。
方法二:内联环境变量传参
如果你觉得第一种方法的命令有点长,可以利用 Shell 的特性,在输入 sudo 的同时直接把变量“贴”在命令前面。这样就不会被 sudo 的安全策略给过滤掉:
sudo http_proxy="http://192.168.61.61:63106" https_proxy="http://192.168.61.61:63106" apt-get install p7zip-full -y
优点: * 敲起来稍微短一点。
- 同样是一次性生效,用完即焚。
💡 避坑小贴士:别忘了 update
如果你挂上代理后,报错从 Network is unreachable 变成了 404 Not Found 或者找不到软件包,那说明你本地的软件源索引已经太老了。
在执行 install 之前,切记先带上代理更新一下索引:
sudo apt-get -o Acquire::http::Proxy="http://192.168.6.6:6016/" update
等 update 顺利跑完,再执行安装命令就万无一失了。
总结:在 Linux 服务器运维中,灵活利用命令自带的参数或是环境变量注入,可以在不污染全局环境的情况下快速解决网络阻断问题。希望这个小技巧能帮你省下排查网络问题的时间!
版权属于:soarli
本文链接:https://blog.soarli.top/archives/893.html
转载时须注明出处及本声明。