"ssh反向连接"

Published: Thu 02 January 2014
By Ray

In 2014.

ssh是广大人民喜闻乐见的远程连接方式。有些时候,实验室里的集群机,只有内部的ip,我们没有办法在实验室外远程连接。寒假就来来临,我想在家连实验室的集群机干活(好吧,这只是个美好的愿望,我估计我会玩一寒假...),于是,我就开始研究怎么用ssh反向连接。

要想实现在家也能访问实验室的集群,首先,你需要一台有固定ip的VPS。在实验室,把集群机反向连接到这台VPS(反射的意思是,你以后可以通过VPS来连接和使用集群,而不是用集群机来使用VPS)。

这篇具体的ssh反向连接的教程已经讲的很清楚了。下面就记载下我遇到的问题吧。

VPS的权限问题

首先,在我用的VPS上,我并没有root权限(开最低限度的权限是很有必要的,也是最安全的)。所以说,那篇教程中的很多命令,我没办法像平时一样用root权限安装在VPS上。

首先查看一下VPS中的Linux的发行版本信息lsb_release -a,好,发现这台VPS是Fedora。我研究了一会没发现怎么安装ss命令,但ss本身只是一个查看的命令,对于我们要做的事情没有影响。

root权限

在执行最后一步,也就是在外网的机器上ssh local -pXXXX的时候i需要输入内网主机B的密码。这一步需要外网主机A的root权限。如果没有的话,会出现Permission Denied的警告。其实密码是正确的。另外,这个密码是一定要输入的,我添加了把A,B的ssh都添加到对方的authorized_key里了,但还是要输入密码。

查看端口占用情况

输入命令netstat -ap|grep 12345即可查看12345端口的使用情况。没有输出表示端口未被占用。

在后台运行autossh

使用命令nohup autossh -M 1234 -NR 5678:localhost:9101 username@ip &,重点是nohup和结尾处的&,这样输出就会被送到nohup.out而不是终端中了。

无响应的情况

我多次遇到在外网主机A连接内网主机B时无响应的情况。也不报错,就是一直等待。这种情况下只能把内网主机B的有关ssh外网主机A的命令全kill掉,再重连接一次。无响应的原因应该是端口被占用,然后ssh命令在等待端口释放吧。也有可能是实验室的网实在太卡太卡了...

autossh之前,记得先把ssh的public key加到外网主机中,不然会报错Exit 1

如果绑定的时候,出现各种奇怪的错误,出现溜达一圈,买瓶酸奶,回来重新绑定一次,可能就会解决了。谁知道我第一次是哪里输错了...

如果还是连不上,那么,还是祈祷吧...三台物理机我都绑定了,但因为实验室的网络实在太差,时断时续,三台基本上只有一台能连过来。

Future Work

如果内网的主机重启了的话,以上的工作就要重做一次。应该把这些命令放到内网主机的开机启动项中。不过,真要出现内网主机挂掉的情况的话,寒假不可能有人来重启的...所以说,我就先不做这部分内容了。

Conclusion

真不容易啊,折腾我半天...

links

social