SSH隧道

先总结

  • 如果源地址是 ssh client 的某个端口,称为本地转发(Local Port Forwarding),发往 ssh client 指定端口的数据包会经过 ssh server 进行转发;
  • 如果源地址是 ssh server 的某个端口,则称为远程转发(Remote Port Forwarding),发往 ssh server 指定端口的数据包会经过 ssh client 进行转发.

1-19.jpg ssh-port-forwarding.webp

# 注意:命令都是在本地client上运行

# 本地端口转发
# 访问本地端口即访问目标端口
ssh -L [本地ip]:本地端口:远程ip:远程端口 user@server_ip

# 远程端口转发
# 访问远程端口即访问目标端口
ssh -R [远程ip]:远程端口:本地ip:本地端口 user@server_ip

注意

1. 使用ssh前先修改配置文件

image-20230421140114499

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. 本地端口转发

绿色代表能访问,红色代表不能访问 image.png

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. 远程端口转发

image.png

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