参考:
https://www.zsythink.net/archives/2450
https://luckyfuture.top/ssh-tunnel#SSH%E9%9A%A7%E9%81%93
https://zhuanlan.zhihu.com/p/561589204?utm_id=0
1、 SSH隧道(搭建SSH隧道绕过防火墙):
ssh命令除了登陆外还有代理转发功能
SSH 隧道是 SSH 中的一种机制,它能够将其他 TCP 端口的网络数据通过 SSH 连接来转发,并且自动提供了相应的加密及解密服务。因为 SSH 为其他 TCP 链接提供了一个安全的通道来进行传输,因此这一过程也被叫做“隧道”(tunneling)。
SSH 隧道也可以叫做端口转发
SSH 隧道能够提供两大功能:
1)加密 SSH Client 端至 SSH Server 端之间的通讯数据。
2)突破防火墙的限制完成一些之前无法建立的 TCP 连接
SSH一共提供了3种端口转发,分别是本地转发(-L参数)、远程转发(-R参数)和动态转发(-D参数)
-C:压缩传输,提高传输速度。
-f:将SSH传输转人后台执行,不占用当前的Shell。
-N:建立静默连接(建立了连接,但是看不到具体会话)。
-g:允许远程主机连接本地用于转发的端口。
-L:本地端口转发。
-R:远程端口转发
-D:动态转发(socks代理)
-P:指定SSH端口
例子:
ssh -p 31022 -NL 7860:192.168.1.1:7860 root@183.3.145.12
SSH隧道,它通过加密和安全地传输数据。通过这个隧道,可以在本地机器和远程服务器之间建立一个安全的通信通道。
具体来说,这个命令中的参数-NL表示创建本地端口转发。它将本地机器的7860端口与远程服务器的192.168.1.1:7860端口进行连接。实际上,当本地机器收到对本地7860端口的请求时,请求将被转发到远程服务器的192.168.1.1:7860端口。
通过这个隧道建立的通信是安全的,因为SSH使用了加密来保护数据的传输。这意味着在本地机器和远程服务器之间传输的数据被加密,只有具有正确密钥的两端才能解密和读取数据
或:
ssh -L 9906:10.1.0.2:3306 root@10.1.0.2
上述命令表示从本机(ServerA)建立一个到ServerB(10.1.0.2)的ssh隧道,使用本地端口转发模式,监听ServerA本地的9906端口,访问本机的9906端口时,通讯数据将会被转发到ServerB(10.1.0.2)的3306端口。
ssh软件一般也有入口:
2、本地电脑局域网内网穿透外网访问
参考:https://www.youtube.com/watch?v=4kCQICjI298
上图总体框架步骤解释:
1、内网电脑最左,有个服务比如起个文件服务器python -m http.server,这里起的8000端口
2、公网服务器中间,这里用的阿里云服务器,打开终端开启9999 tcp端口,然后打开sshd相关服务
echo "GatewayPorts yes" >> /etc/ssh/sshd _config
echo "AllowTcpForwarding yes”>> /etc/ssh/sshd _config
systemctl restart sshd
另外:netstat -anp |grep 9999 可以查看端口监听情况
3、然后在最左电脑创建ssh隧道
9999是中间远程服务器端口,127.0.0.1:8000本地静态服务器端口,root@8****4 -p 22是远程服务器外网公开ip和端口
ssh -NR 9999:127.0.0.1:8000 -f root@8****4 -p 22
4、外部其他电脑最右,就可以输入中间远程服务器ip加端口转发到的9999端口进行访问本地
8****4:9999