大多数服务器都是在隔离的网络环境中,服务器被限制访问互联网。原因当然是出于安全考虑,一旦服务器有外网访问能力,中毒后会主动更新病毒库。比如各种广告、XX全家桶就是这么来的。
那如果想在服务器上安装软件怎么办❓
可能有人会说先提前下载好,再传上去不就行了嘛。这对于安装单一软件是没有问题的,提前把安装包下好,然后上传到服务器上。但如果安装的软件比较复杂,依赖比较多就麻烦了。
比如安装ollama
或其他通过 insall.sh 脚本自动更新一键安装的软件。再比如使用 yum 或 apt 通过软件源安装的软件。还有一些是各种pull命令,比如 ollama pull, doker pull, git pull 从国外、github下载资源的场景。
这里提供一种借助本地电脑的上网能力让服务器上网的方法。如果你的台式机或笔记本有上网能力,你可以将本地的 proxy 端口映射到服务器上,服务器就可以使用你的台式机或笔记本的端口上网了。
以我的电脑为例,我本地的http代理服务端口为 7890 ,通过 7890 端口,我的 chrome 是可以正常访问 github 等资源站点的。
如何让服务器也具备上网能力呢❓
有人说会说通过 export https_proxy=http://<your-ip>:7890
不就可以了吗。这种情况适合你的服务器和你的电脑在同一个物理网络下的情况。也就是当你的服务器可以 ping 通你的电脑的IP的情况下,这是可以的。
在同一个局域网下,可以通过设置 https_proxy 环境变量指向代理服务的地址,可以让服务器具备上网能力。如果服务器和能上网的电脑不在一个物理网络内,服务器无法ping通电脑时,就不能采用这种方式。
此时可以使用 ssh 隧道的方式将本地的 proxy 端口映射到服务器上,绕过不在一个物理网络下的限制。
ssh 隧道命令:
ssh 7890:127.0.0.1:7890 root@<server-ip> -p 22
通过 ssh 隧道,服务器上会多出一个 7890 的端口,服务器可以通过 export https://127.0.0.1:7890 让 http 流量指向自己,从而达到服务器上网的目的。
使用这种方式,无论物理服务器在哪里,只要你的电脑能访问服务器的ssh服务,你就可以让服务器访问你的电脑的网络资源。如果你的电脑能用谷歌,服务器就也能用谷歌。
通过这种方式,服务器可以更新外网软件包,特别是服务器需要下载github上的软件资源时。
关于代理相关的知识点可以参考以下文章:
🧲强大的 SSH
🧲Windows 上使用 Privoxy 搭建 Web 代理服务
原创 hyang0 生有可恋