本程序用于局域网内服务器通过ssh远程端口转发,被公网设备访问。 要求:
-
必须保证公网设备以及局域网设备均开启了ssh server。
-
局域网设备通过ssh连接外网设备必须使用非密码验证。手动输入密码将不能使用本程序,此外手动收入密码是不方便,也不合理的。建议使用非对称密钥进行ssh登陆验证。 ssh-keygen -t rsa ssh-copy-id -p user@server_ip (在学校的时候就做好处理,离开学校就做不了了!) 本版本加入了反向校验功能,要求公网设备也能使用非口令验证ssh登陆到公网设备
3 外网设备如果还是处于路由器之下,那么必须在路由器上做端口映射。 个人电脑开启ssh server 的默认端口是22 (不大熟悉的人不要去改 设计防火墙 和selinux 别搞乱了) 在路由器上的 高级功能 上寻找端口映射 内部端口 22 外部端口 可以设置为443 (dlut 没有对 访问外网的443 端口做限制)
-
公网可能没有固定的ip地址 因此为了能够被连接, 因此需要申请一个动态域名,然后将动态绑定在路由器上。此时,外网地址使用域名替代 .......
-
考虑到ssh对登陆位置主机的不信任(ssh登陆流程中,首先客户端跟服务端发送一个申请,服务端返回服务端公钥,而对于第一次建立的ssh连接 客户端并不会信任,为了防止中间人攻击),这种安全机制对于防范中间人攻击是有一定的作用的,但是在我们的端口转发来讲却会带来很多的 不方便,因此我们将在会在 $HOME/.ssh/config 中写入两行配置来关闭主机验证,并在 $HOME/.ssh/UnTrustHosts 中记录下登陆的主机以备日后查询。
使用教程:
如果满足上述要求,可使用此脚本穿透内网 请查看修改如下地方
在tables中加入想要被内网主机建立的远程端口转发参数,使用#来添加注释或者取消一组参数
listen_port_r des_port server_port user server_ip_addrs default_listen_port default_des_port default_server_port lixun default_server_ip 7778 22 443 liyanhong 119.75.218.70
########## 开启#########
校内机器运行 脚本 ./server_run.sh start 开始开启服务 如果想要进入后台运行 请运行 nohup ./server_run.sh start &
公网机器运行 ./client_run.sh start
###########停用######################
校内机器运行 脚本 ./server_run.sh stop
公网机器运行 ./client_run.sh stop
单纯的使用一个脚本ssh-daemon 也是可以的 此时可以在ssh-daemon中更改默认参数就好,但是功能不强,而且对于第一次使用此脚本会有很多不方便的地方,不推荐使用。
-
default_server_ip 这个外网机器的ip地址或者是域名 比如,你不叫厉害申请到的域名是 www.baidu.com (真的只是瞎扯) 此时就些 www.baidun.com 如果有固定ip地址 直接使用就好,再比如如果你比较牛逼你的ip地址是 119.75.218.70 (别看了这个也是百度的地址) 你就输入119.75.218.70
-
default_server_port 这个里面那个数字是你的外网端口,因为有路由器,需要做端口映射(参看 要求 栏)。因为大连理工封杀了对外连接的除了80 443 之外的所有端口,所以各位懂了,端口映射的时候内部端口22 外部端口 443 。这里的default_server_port 也是443 如果你改成了80 default_server_port 80 不过你的路由器可能不会让你改成80……
-
default_listen_port 这个是希望个人电脑被监听的端口,理论来讲可以随便设置(我也不知道我怎么就喜欢了7778) 个人电脑的这个端口将被ssh监听 所以如果有任何数据经过都会被转发到default_des_port
4 default_des_port 这个端口不能乱写……这个是目的端口,也就是说希望将被监听的数据发送的目的端口,所以如果你想连接你的主机的ssh(默认22) 那么 你就需要将目的端口设置为22了,此时数据流向就是 你个人电脑被监听端口的数据通过建立了的ssh连接发送到学校机器上的22端口,然后被学校机器上的 ssh server 发现(机器的22端口被ssh server 监听) 所以你的个人电脑就能远程登陆到学校机器。命令是: ssh -p 7778 user@127.0.0.1 如果你的ssh 监听端口改成了5438 那么你的 default_des_port 就是 5438
如果你对网速很自信,那么你可以试试vnc vnc的默认端口是5900+display 比如我喜欢用5905 那么我就应该将目的端口 default_des_port 设置为 5905
然后个人电脑打开vnc查看软件 输入 vnc://127.0.0.1:7778 (具体数据流向就不说了)
注意事项
####################### 新特性############################ 此版本加入了自动的公网设备ssh登陆内网设备检测,因此公网设备也被要求能以非口令形式登陆内网设备!!! ############ 校内服务器必须要能免口令登陆个人电脑 ############ 电脑刚开机是不能立刻连接上的,因为你的校内机器并不是在每秒都对你的个人电脑发起链接(如果发起连接太多不大好)。所以 等个一两分钟啦。 ########### 本程序没有加入对本程序的保护,也就是说如果被自己被别人被系统自动kill 了 就没了(后续会加入一些保护吧!)
程序特性
############## 脚本加入了对远程转发命令的保护,正常只有一个ssh远程转发命令运行,不会出现相同的转发命令重复运行 如果发现有时断时连的ssh,那是ssh连接测试,不要担心。 ############# 初步测试过断网情况,表现良好。如果ssh失去链接,本脚本将kill 掉ssh远程端口转发,然后继续测试ssh链接 如果失去连接(原因很多,第一个是你的个人电脑没有开机,第二个就是可能网络掉线什么的) 继续测试,直到 成功的建立ssh 连接 然后开始新建一个ssh远程端口转发 并将转发命令记录在个人电脑的 $home/log/ssh_from_LAN/login_info 中。
License GPL
请使用次脚本的人查看该程序,如果出现问题作者概不负责(作者保证没有加入任何不良程序)。如果程序又任何需要改进的地方请联系 name 李逊 email: lixun@mail.dlut.edu.cn