SSH隧道
先总结
- 如果源地址是 ssh client 的某个端口,称为本地转发(Local Port Forwarding),发往 ssh client 指定端口的数据包会经过 ssh server 进行转发;
- 如果源地址是 ssh server 的某个端口,则称为远程转发(Remote Port Forwarding),发往 ssh server 指定端口的数据包会经过 ssh client 进行转发.
# 注意:命令都是在本地client上运行
# 本地端口转发
# 访问本地端口即访问目标端口
ssh -L [本地ip]:本地端口:远程ip:远程端口 user@server_ip
# 远程端口转发
# 访问远程端口即访问目标端口
ssh -R [远程ip]:远程端口:本地ip:本地端口 user@server_ip
注意
1. 使用ssh前先修改配置文件
2. 远程转发本地的地址填localhost不要填127.0.0.1
命令大纲
假设存在三个设备
- laptop 笔记本
- laptop_app 与笔记本同内网的设备(远程服务器不能连接)ip: 172.14.17.28
- server 远程服务器 ip: 47.28.101.27
- server_app 与远程服务器同内网的设备(笔记本不能连接)ip: 172.22.89.30
以下命令都在笔记本终端上运行
# 本地端口转发 (访问本地端口即访问目标`server_app`上的端口)
ssh -N -g -f -L 8080:172.22.89.30:80 root@47.28.101.27
-N 只进行ssh隧道转发,不连接ssh
-g 表示源ip为0.0.0.0
-f 后台运行
# 远程端口转发 (访问远程端口即访问目标`laptop_app`上的端口)
ssh -N -g -f -R 80:172.14.17.28:3000 root@47.28.101.27
# 动态转发
ssh -N -g -f -D 1080 root@47.28.101.27
得到socks5代理服务
1. 本地端口转发
绿色代表能访问,红色代表不能访问
ssh -N -g -f -L 8080:172.22.89.30:80 root@47.28.101.27
# frp实战(即访问本地8080端口等价访问目标80端口)
ssh -N -g -L 8080:127.0.0.1:80 root@cn-hz-bgp-1.openfrp.top -p 43252
访问本机主机的8080端口即访问目标主机的80端口服务
2. 远程端口转发
ssh -N -g -f -R 80:172.14.17.28:3000 root@47.28.101.27
# 腾讯云实战(访问http://43.142.174.216:5200/ 即访问目标的 5212端口上的服务)
ssh -N -g -R 5200:192.168.5.58:5212 colzry@43.142.174.216
访问远程主机的端口即访问目标主机的端口服务 常用于将内部的服务让其他用户访问
关闭服务
ps -ef | grep ssh
kill -9 PID
3. 动态端口转发
相当于代理服务器,即科学上网的节点
ssh -N -g -f -D 1080 root@47.28.101.27
socks5://127.0.0.1:1080 使用示例:linux-debian系列
sudo apt-get install proxychains -y
vim /etc/proxychains.conf
# 尾部加上
socks5 127.0.0.1 1080
# 在需要使用代理命令前使用
proxychains git clone https://github.com/xxx/xxx