Linux下ssh反向隧道进行内网穿透

2019-03-27  本文已影响0人  littlebear_xbz

1. 使用情景

经常会有如下场景,你在内网有一台服务器A,可以访问内网,也可以访问外网,当你想从外网访问到这个这台内网服务器时,就需要用到ssh反向代理了;

例如你想在外网ssh到主机A,因为你的服务器A没有公网IP所以你无法直接访问;这时你可以借助公网主机B来实现。

如上图,拥有公网IP的主机B如何ssh到内网主机A呢?

2. 构建反向ssh隧道

在主机A上执行如下命令

ssh -p2803 -qngfNTR 6023:192.168.0.2:22 root@96.45.*.*

执行后输入主机B的密码,保持连接不要断开

-p 表示公网主机的ssh端口为2803

上面语句表示,可以通过在主机B上执行ssh localhost -p 6023 登陆到主机A

原理是通过主机A主动ssh访问主机B并留下反访问自己的端口2803

3. 打洞

通过公网主机,构建隧道,使分别位于nat后的主机可以通讯。如果想要使任何其它外网主机C都可以通过主机B远程ssh到主机A,则需要修改主机B上的SSH服务配置文件

操作如下:

1、 在主机B上编辑sshd配置文件/etc/ssh/sshd_config

GatewayPorts yes

2、 然后重启sshd

sudo systemctl restart sshd

4. 维持隧道稳定

上面隧道已经建立成功,可是如果主机A的ssh连接断开(超时或者重启),隧道就会消失,那么有没有办法自动维持ssh稳定呢?在ssh连接断开时自动重连,或者在开机时自动连接ssh。

有,autossh

维持隧道稳定可以使用autossh

4.1、安装autossh

在线安装

redhat下安装

$ yum install autossh

离线安装

        $ sudo apt-get install gcc make

  $ wget http://fossies.org/linux/privat/autossh-1.4e.tgz

  $ tar -xf autossh-1.4e.tgz

  $ cd autossh-1.4e

  $ ./configure

  $ make

  $ sudo make install

4.2、修改命令

ssh -p2803 -qngfNTR 6023:192.168.0.2:22 root@96.45.*.*

修改为

autossh -p 2803 -M 6777 -NR '*:6023:192.168.0.2:22' root@96.45.*.*

注释:

-M 为监听端口,与转发无关

如果需要后台执行,可以加-f参数,可是后台执行无法输入密码,需要提前配置好ssh密钥

5、 隧道传输文件

在主机B上可以使用scp命令传输文件

如将主机B上/home/hi.txt 传输到主机A上,可以在主机B上输入命令

scp -P 6023 /home/hi.txt root@localhost:/home/

如将主机A上/home/hi.txt 传输到主机B上,可以在主机B上输入命令

scp -P 6023 root@localhost:/home/hi.txt /home/

上一篇下一篇

猜你喜欢

热点阅读