美文网首页
Linux下ssh反向隧道进行内网穿透

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

作者: littlebear_xbz | 来源:发表于2019-03-27 16:36 被阅读0次

    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/

    相关文章

      网友评论

          本文标题:Linux下ssh反向隧道进行内网穿透

          本文链接:https://www.haomeiwen.com/subject/rcttbqtx.html