前言

上周,笔者在一台 Ubuntu 18.04 的训练服务器上创建 Python 环境时,遇到了如下报错:

2cafb752c7aba914b2e9cc5cedde07bd.png

尝试为 anaconda 配置镜像源后,该报错没有任何变化,遂怀疑服务器处于断网环境,使用 pingnslookup 指令检查网络连通性,发现服务器 DNS 服务异常。

2de0291bc39f8f437a59cc08bb03ee2c.png

由于笔者并没有服务器的管理员权限,无法修改网络相关的配置,因此只能考虑 “曲线救国”,通过 SSH 隧道将本地代理服务端口转发到服务器上,这样服务器就可以通过 SSH 隧道访问互联网。

转发本地代理端口

首先在本地机器上启动代理,这里笔者使用Clash Verge Rev 在 7897 端口开了一个 Direct 模式的代理服务。然后使用以下命令连接服务器:

ssh -R 7890:localhost:7897 <username>@<servr_ip>

这里的 -R 参数表示远程端口转发,即通过 SSH 隧道把服务器 7890 端口的流量转发到本地的 7897 端口。

服务器端代理配置

终端代理

服务器端可以通过设置 http_proxyhttps_proxy 环境变量来配置代理的使用:

export http_proxy=http://localhost:7890
export https_proxy=$http_proxy
export ftp_proxy=$http_proxy

上面的指令效果是临时的,为了方便也可以将其写入 .bsshrc 文件。如果选择后者,记得使用 source .bashrc 更新配置。

conda 代理

除了命令行,conda 也需要单独配置代理服务,具体而言,需要在 .condarc 配置文件中新增如下内容:

proxy_servers:
  http:
    http://localhost:7890
  https:
    http://localhost:7890

可以运行以下命令来检查配置是否生效:

conda config --show proxy_servers

结语

至此,我们已经完成了所需的全部配置,现在服务器上的流量能够通过 SSH 隧道转发到本地代理从而实现网络访问。