SSH命令之正反向代理和端口转发

前言

近期碰到了一个需要连接主机A的数据库的需求,但是主机A是在内网中,无法直接连接到,也就无法访问到数据库。但是这里也有另一台主机B,和主机A同处一个内网中,但是连接主机B需要通过跳板机C。我的服务器是yyy。通过这次经历我发现我对ssh连接的命令以及正反向代理的理解不是很充分,最终在rhh的帮助下才解决了问题。

主机 主机IP
A 47.168.127.1
B 47.168.127.2
yyy 47.168.20.2
C 47.168.127.43

思路

由于我无法直接连接主机A,但主机A和主机B在同一内网下,所以我可以通过主机B作为代理转发主机A的3306端口到我的服务器yyy的3308端口即可。这样我就可以直接在yyy上连接数据库。所以此时只需要连接主机B即可,而连接主机B可以通过跳板机C代理连接。、

解决

ssh -o Proxycommand='ssh root@47.628.127.43 -P 123 -W %h:%p' root@47.168.127.2
ssh -R 3308:47.168.127.1:3306 root@47.168.20.2
这样只需要在yyy的3308端口就可以连接到主机A的数据库了
mysql -h 127.0.0.1 -P 3308 -u root -p

SSH命令

正向代理 ssh -fCNL
反向代理 ssh -fCNR
-f 后台执行ssh指令
-C 允许压缩数据
-N 连接后不取得shell
-C 启动压缩,加快速度

正向代理(L)

将中间主机可访问的主机指定端口镜像到本地指定端口

ssh -L 本地IP:本地端口:中间主机可访问的IP:中间主机可访问的IP的端口 root@中间主机

反向代理(R)

将本地可访问的主机的指定端口镜像到远程指定端口

ssh -R 远程IP:远程端口:本地可访问IP:本地可访问IP的端口 root@远程主机

端口动态转发

当访问internet时,本机的1080端口作为代理服务器(socks5代理),访问请求被转发到ssherver上,由sshserver代替之访问internet

ssh -fCND 1083 root@x.x.x.x
ssh -fN -D 0.0.0.0:1083 root@x.x.x.x
执行之后 使用本地1083的socks5代理,流量显示为服务器x.x.x.x的ip

参考链接

rgg

原文地址:https://www.cnblogs.com/matoka/p/13626253.html