【简洁清晰】使用ssh自带的反向代理功能,实现访问内网设备的任意端口,包括ssh、vnc等

机器A:内网设备
机器B:中转设备,用来转发,最好有公网ip
机器C:任意设备,客户端,用来访问机器A,就是你正在用的电脑
内网穿透图示


0.自行配置好[机器A>>机器B]、[机器C>>机器A]、[机器C>>机器B]的ssh密码或密钥。


1.配置机器B:

/etc/ssh/sshd_config中的GatewayPorts设置为yes,重启sshdsudo systemctl restart sshd.service


2.配置机器A:

机器A运行命令:ssh -fNR [中转端口]:localhost:[机器A将被访问的端口] [机器B的ssh用户名]@[机器B的ip]
-f:后台运行
-N:只端口转发
-R:将机器B的指定端口转发到本地指定端口。

举例:

  • 【转发ssh】
    机器A运行:ssh -fNR 21212:localhost:22 ubuntu@36.152.44.96

  • 【转发vnc】
    机器A运行:ssh -fNR 23456:localhost:5900 ubuntu@36.152.44.96


3.机器C的远程连接机器A:

举例:

  • 【穿透ssh】
    机器C运行:ssh [机器A的用户名]@[机器B的ip] -p [中转端口],比如ssh pi@36.152.44.96 -p 21212,(机器B的安全组里的21212端口需要设置为放行)

  • 【穿透vnc】
    这里使用VNC Viewer来连接,看下图:
    vnc viewer,然后输入机器A的用户密码即可。(机器B的端口同样需要设置放行)


*长时间保持反向代理:

机器A与机器B的反向代理ssh如果长时间不流动数据,ssh会自动断开。现在将其设置为长时间不断开。

  • 【不推荐】方法一:
    在机器B/etc/ssh/sshd_config中,设置ClientAliveInterval为60,设置ClientAliveCountMax为10,重启sshdsudo systemctl restart sshd.service
    代表机器B每60秒都会发空包,如果连续10次都没有收到回应,那么断开连接。

  • 【推荐】方法二:
    机器A使用第三方软件autossh,举例:autossh -M 1234 -fNR 21212:localhost:22 ubuntu@36.152.44.96
    -M:用一个端口来监听ssh是否断开,注意不要设置为21212或相邻的值


*开机自启动:

参考ubuntu18.04开机自启动脚本
要注意你的脚本需要后台运行,并且等待网络连接成功后再运行ssh反向代理命令,特别是wifi网络,开机后需要一定时间才能连接上(autossh不用管这条)。如果有多个端口需要反向代理,请用sleep 1等待一秒隔开。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

朴人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值