绕过内网防火墙给只能ssh的服务器翻墙装R包以及使用github



P大的服务器装R包真把我搞吐了!

最近我用的学校某计算服务器平台除了ssh登录,竟然连curl www.baidu.com都给封了,离谱

image-20200729163234670

好,既然你给我留ssh还让我用,那我就用ssh做代理隧道,毕竟装不上R包和Python包,神仙也难搬砖啊!

故事是这样的!

Ssh Skip Wall-1

情景设置如下:

  • 我在家,不在校园内网(LAPTOP端)
  • 学校云计算平台(COMPUTING SERVER,CS),我在家访问不了,只有在校园网可以访问
  • 跳板机(SKIP SERVER,SS),跳板机具有内网和公网两个IP,所以我可以ssh访问SS,从SS再ssh访问CS
  • CS云计算平台由于数据安全问题,【校园防火墙】会把大量访问过滤掉。
    • 无法访问特定的网站如GitHub、Bioconductor
    • 在服务器进行计算时R包装不上,软件下不了,凉凉,折腾的人想吐、、、
    • 注意,这个服务器国内的镜像都访问不了!而且清华源的Bioconductor崩了不能用、、
    • 最丧病的是,curl www.baidu.com有时候都能嗝屁。。。
  • 我【没有CS的root权限】所以一般的代理工具一个都别想装,对,一个都别想。弱小又无助的我除了ssh,没得任何特殊权限
  • 你有一台自己的没有防火墙限制,可以顺利访问网络的SERVER,Private Server,PS
  • 这里我们【不用非法手段访问境外网络】,只讨论如何让我们的CS能顺顺利利安装各种R包以及使用git clone来下载开源软件

分析:

  1. 在上述设定下我们既不能非法上网,也不可突破校园防火墙
  2. 只能借助SS这台服务器链接CS
  3. 那么我们就可以借助ssh 隧道让CS与SS通信,让CS服务器的https访问和socks访问通过ssh隧道,经SS转发到公网,从而访问到各大镜像网站,顺利安装R包、or Git clone

所幸ssh具有这种功能

首先从LAPTOP登录到SS再登录到CS

ok,现在我们人在CS

假设CS IP:1.2.3.4,SS IP:5.6.7.8

PS IP: 2.2.3.3 ssh访问端口1234(ssh默认访问22端口)

【在CS】:

screen -S web-cs
# 没有screen命令可以编译或者conda安装

【在CS的web-cs对话框中】

ssh -qL 7070:127.0.0.1:5678 username@5.6.7.8 
# SS指定端口的话就加入-p <端口号>

# 不出意外的话你输入密码,就ssh登录到了SS跳板服务器上
# -L 命令用于建立从SS的5678端口到CS的7070端口的通信,端口可以更改

# 继续,建立SS与PS的通信
ssh -qTnN -D 5678 username@2.2.3.3 -p 1234
# 顺利的话会让你输入ssh登录密码
# 输入密码之后敲回车,就会停在这儿,好了,不要乱动

接下来按组合键ctrl + a,松开,点一下d,将web-cs这个对话框放在后台运行

Ssh Skip Wall-2

【回到了CS】:

screen -S web-free-r
# 进入这个对话框

【在CS的web-free-r对话框中】

  • 我是R3.6.3,如果你安装DESeq2的话尽量使用此版本,R4.0太新,目前还装不上依赖包
  • 选择镜像的时候要选择55-USA 或者East Asia(第十七还是十八,我忘了,你可以看看)
    • 上面镜像选择很关键直接关系到装DESeq2包成功否
export https_proxy="socks5://127.0.0.1:7070"; 
export HTTPS_PROXY="socks5://127.0.0.1:7070";

R# 进入R console
install.packages("BiocManager")


# 如果顺利安装完毕则开始安装DESeq2
BiocManager::install("DESeq2")

一切安装完毕后直接按ctrl + d kill掉这个screen对话框

【回到CS】

如果你要用git,同理,但是细节不太一样

screen -S web-free-git

# 进入对话框后
export all_proxy="socks5://127.0.0.1:7070"
# 可以拿下面这个测试
git clone https://github.com/jech/polipo.git

同样完成之后可以ctrl + d kill掉这个对话框

这样就完成了通过ssh隧道绕过【校园防火墙】转发内网服务器访问到【公网】

别忘了我们的转发服务还在web-cs这个对话框后台跑着呢,如果不用了就可以kill掉,释放CS的7070端口和SS的5678端口,省的占用过多端口

screen -S web-cs -X quit

如果你成功了,留言告诉大家袄!

为正在搬砖,装不上R包的同学们提供一点正向反馈~

如果你没成功,也可以详细一点在留言告诉我,我们来看看怎么回事。