menu Chancel's blog
rss_feed
Chancel's blog
有善始者实繁,能克终者盖寡。

Linux服务器使用本地http代理访问国外源

作者:Chancel Yang, 创建:2024-06-25, 字数:2368, 已阅:51, 最后更新:2024-06-25

国内的许多云服务器在安装 docker 或者访问 github 等国外资源时很慢甚至经常连不上

在本地开发时也会遇到这种无法访问的情况,本地往往使用网络代理来加速访问 github/docker 等资源

但在服务器上去去部署网络代理不方便,此时借助 ssh 连接来转发本地的网络加速代理来给服务器安装软件就方便多了

举例在阿里云的 Ubuntu2204 上安装 docker ,官方安装方法如下:

Bash
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

如果不使用代理进行安装,访经常会访问不到 download.docker.com 网站从而安装失败

假设本地有一个网络加速代理 127.0.0.1:1080 ,在 ssh 时带上 -R 参数,用于远程端口转发,如下:

Bash
ssh -R 11080:127.0.0.1:1080 username@server_ip

在该命令中,将本地的 127.0.0.1:1080 端口映射到了远程服务器的 11080 端口上让服务器可以通过本地代理访问外网

在 ssh 进入后,测试是否成功启用代理:

Bash
$ export https_proxy=http://127.0.0.1:11080                                                                                
$ export http_proxy=http://127.0.0.1:11080                                                                                 
$ curl cip.cc
IP      : 4.4.4.4
地址    : 美国  加利福尼亚州  洛杉矶
运营商  : hosteons.com
数据二  : 美国 | 新加坡HostEONS私人有限公司(美芝路5001号黄金坊04-01号)美国Psychz数据中心洛杉矶节点
数据三  : 美国加利福尼亚
URL     : http://www.cip.cc/4.4.4.4
$ sudo curl cip.cc                                                                                                            
IP      : 202.202.202.202
地址    : 中国  河南  洛阳
运营商  : 电信
数据二  : 河南省洛阳市 | 电信
数据三  : 中国河南省洛阳市 | 电信
URL     : http://www.cip.cc/202.202.202.202

可以看到远程服务器已经成功获取到本地 1080 的网络代理

但 sudo 权限又不继承用户非安全环境变量如 http_proxyhttps_proxy,所以没有使用网络代理

而安装许多软件都需要使用到 sudo 权限,那么可以使用 sudo -E 来保留用户的环境变量,如下:

Bash
$ sudo -E curl cip.cc                                                                                                            
IP      : 4.4.4.4
地址    : 美国  加利福尼亚州  洛杉矶
运营商  : hosteons.com
数据二  : 美国 | 新加坡HostEONS私人有限公司(美芝路5001号黄金坊04-01号)美国Psychz数据中心洛杉矶节点
数据三  : 美国加利福尼亚
URL     : http://www.cip.cc/4.4.4.4

[[replyMessage== null?"发表评论":"发表评论 @ " + replyMessage.m_author]]

account_circle
email
web_asset
textsms

评论列表([[messageResponse.total]])

还没有可以显示的留言...
gravatar
[[messageItem.m_author]] [[messageItem.m_author]]
[[messageItem.create_time]]
[[getEnviron(messageItem.m_environ)]]
[[subMessage.m_author]] [[subMessage.m_author]] @ [[subMessage.parent_message.m_author]] [[subMessage.parent_message.m_author]]
[[subMessage.create_time]]
[[getEnviron(messageItem.m_environ)]]