背景:

最近买了一个小主机,想放在家里搭几个服务,通过内网穿透来访问,但是家里没有独立的IP,在公司里没有办法连接到家里的机器上

准备一台ECS服务器,阿里云、腾讯云、某某云都可以,最好服务器机房的地区选择的离自己近点

ssh -fNgR 2222:127.0.0.1:22 111.231.XX.XX 
命令 含义
-R port:host:port (-R 2222:127.0.0.1:22 对应上命令) 将远程机器的端口映射到本地。第一个port是远端服务器port,第二个是本地port,ip地址是本地IP
-f 告诉SSH客户端在后台运行
-g 允许远程主机可以远程访问,这里有坑,下面会解释。
-N 不执行脚本或命令,通常与-f连用。

其原理

  1. 本地主机和远程服务器建立连接
  2. 远程服务器上分配一个socket监听port端口
  3. 通过监听一个端口建立了一个连接,该连接就经过安全通道转向本机的端口。(root用户登录远程服务器才能转发端口)

执行完成命令,第一次会出现让输入yes,输入后,再输入远程服务器的root密码

登录到远程服务器查看

[root@VM_0_5_centos .ssh]# lsof -i :2222
COMMAND   PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
sshd    19361 root    8u  IPv4 65047102      0t0  TCP localhost:2222 (LISTEN)
sshd    19361 root    9u  IPv6 65047103      0t0  TCP localhost:2222 (LISTEN)

此时在服务器上直接ssh本地的2222端口,就可以访问内网机器了。

ssh 127.0.0.1 -p 2222

这里貌似一切都OK,但是我们需要的是一台跳板机,不可能只跳家里的那台。当换一台本地机器与ECS服务器连接后,发现链接拒绝。其实在lsof 查看的时候,监听的是localhost。其他机器当然无法访问了。
解决方式,远程服务器的ssh需要开启GatewayPorts yes

#vim /etc/ssh/sshd_config 
新增
GatewayPorts yes
#service ssh restart #如果出现错误 则用service sshd restart
#kill -9 19361 #杀掉远程映射的进程,断开链接,进程号可以通过lsof查到

在我们内网的机器上重新执行最开始的那条命令,然后在远程服务器上查看,监听的就是公网IP

[root@VM_0_5_centos .ssh]# lsof -i :2222
COMMAND   PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
sshd    19361 root    8u  IPv4 65047102      0t0  TCP *:EtherNet/IP-1 (LISTEN)
sshd    19361 root    9u  IPv6 65047103      0t0  TCP *:EtherNet/IP-1 (LISTEN)

现在可以远程访问内网中的主机了,ssh 2222端口就可以访问了

ssh root@111.231.xxx.xxx -p 2222 #实际访问的就是内网机器
ssh 127.0.0.1 -p 2222 #这个命令是通过ssh工具已经连接到了服务器上了,然后再执行这个命令可以到内网机器
#而上面命令则是,当前机器及linux或在公司用linux 登录到服务器再转发到家中内网机器中,小白不要搞混

你以为这样就结束了么?不不不!
在通过ssh连接断开之后,过一段时间,你会发现,在内网机器上输出了pipe broken 的信息,其实是ssh检测到长时间不操作,会自动把ssh断开的。这个时候,最好两边机器都修改一下/etc/ssh/sshd_config文件

#Compression delayed
ClientAliveInterval 60  #这个的目的是每隔60秒向服务器发送一次心跳包
ClientAliveCountMax 10  #如果发了10次后对方仍没有做出回应,则关闭ssh连接(一般不会不响应的)
#ShowPatchLevel no

两边都修改好了,需要重新启动一下sshd

service sshd restart

重新执行
ssh -fNgR 2222:127.0.0.1:22 111.231.XX.XX 

OK大功告成

转载请注明出处

Last modification:November 9th, 2018 at 03:21 pm
If you think my article is useful to you, please feel free to appreciate