ssh做反向代理,可以实现无论在什么位置都能访问到学校内网服务器
适用场景:
主机B不能直接访问主机A
主机A能直接访问主机B
SSH参数介绍(区分大小写)
-f:后台执行ssh指令
-C:允许压缩数据
-N:不执行远程指令
-R:将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口
-L:将本地机(客户机)的某个端口转发到远端指定机器的指定端口
-p:指定远程主机的端口
学校内网服务器操作:
# ssh -fNR 远程端口:localhost:本地端口 远程用户@远程ip
ssh -NfR 2345:localhost:22 root@12.12.12.12 -p 22
之后会要求你输入公网阿里云服务器的密码,输入正确后,可以通过:ps -ef | grep ssh 来查看进程情况,成功显示说明这一步成功。
第一步完成后,就可以在任意位置访问公网阿里云服务器进行一下操作访问学校内网服务器了。
公网阿里云服务器操作:
ssh 内网用户名@localhost -p 本地端口号
ssh manli@localhost -p2345
之后要求输入相应的用户名的密码,正确输入后,便可以访问学校内网服务器了。
但是这样很不稳定,非常不稳定,总是会断掉,尽管进程在,但是连接已经断掉,所以这个时候就可以用到autossh来自动重新连接。
autossh保证连接稳定:
autossh与ssh的区别就在于在学校内网操作的时候,命令变成:
autossh -M 2346 -NfR 2345:localhost:22 root@12.12.12.12 -p 22
-M参数指定一个端口,这个端口是公网机器用来接收内网机器的信息,如果隧道不正常而返回给内网机器让他实现重新连接。
(如果没有安装autossh,在ubuntu下,用apy-get install autossh进行安装)
这样就能稳定的从任何地方访问学校内网服务器了,开心。
PS:
在学校内网操作的时候,因为我弄了太多,导致端口冲突,出现了下面这个问题:
解决方法如下:
1)首先查看进程:ps -ef | grep ssh
2)发现有很多2345端口的进程,所以才会出现端口连接错误,所以用命令杀死进程,再做操作:kill -9 进程ID
如果不是超级用户,就用:sudo kill -9 进程ID 来操作