示例解析:通过SSH隧道从本地开发机连接云数据库
详解SSH隧道连接云数据库(AWS RDS等)的工作原理
你贴的这条SSH命令,是用来绕过公网限制,把本地开发机和AWS VPC内的私有数据库(比如RDS)连起来的典型操作——因为大部分云数据库都会被配置成只允许VPC内部访问,不让外部直接连,这时候就需要SSH隧道+堡垒机来搭桥。
ssh -NL 1433:some-db.us-east-1.rds.amazonaws.com:1433 \ ubuntu@ec2-some-ip.compute-1.amazonaws.com -i ~/myapp.pem
下面逐个解释你的疑问:
1. 堡垒机(ec2-some-ip.compute-1.amazonaws.com)的具体作用?
把VPC比作一个封闭的写字楼,里面的RDS数据库是写字楼里的办公室,你在写字楼外面(本地开发机),直接进不去办公室。而堡垒机就是写字楼门口的前台岗亭:
- 岗亭有对外的门(公网IP),你能直接走到岗亭门口(用SSH连堡垒机的公网IP);
- 岗亭在写字楼内部有通道(属于VPC网络),能直接走到办公室(堡垒机可以访问RDS的内网地址);
- 你进了岗亭之后,就能让岗亭帮你把消息传给办公室里的数据库,再把数据库的回复带回来。
2. 端口1433和SSH默认22端口的关联逻辑?
这俩端口干的是完全不同的事,是通过SSH隧道“绑”在一起的:
- 1433是数据库的“门牌号”:本地开发机上的数据库客户端要找数据库,得敲这个门;RDS数据库也是靠这个端口接收请求。
- 22是SSH连接的“门牌号”:你要连堡垒机的SSH服务,得敲这个门,所有加密的隧道流量都是通过这个端口在本地和堡垒机之间传输的。
简单说,就是你把“要发给数据库1433端口的消息”,装进一个加密的SSH包裹里,这个包裹走22端口的路送到堡垒机;堡垒机拆开包裹,把里面的消息原封不动发给RDS的1433端口,再把RDS的回复同样打包成SSH包裹,走22端口送回给你。
3. 命令的端口转发逻辑和完整流量路径?
这条命令不是把本地1433转去SSH的22端口,而是创建了一条「本地监听→SSH加密通道→堡垒机转发到RDS」的端口转发链,完整的往返路径是:
请求路径(本地→数据库):
- 本地数据库客户端连接
127.0.0.1:1433; - 本地SSH客户端监听着1433端口,收到请求后将数据加密打包;
- 加密数据通过SSH连接(用22端口)发送到堡垒机的SSH服务;
- 堡垒机SSH服务解密数据,转发到目标地址
some-db.us-east-1.rds.amazonaws.com:1433; - RDS数据库接收请求并处理。
回复路径(数据库→本地):
- RDS把处理后的回复发送给堡垒机;
- 堡垒机SSH服务将回复加密打包;
- 加密回复通过已建立的SSH连接(仍用22端口)发回本地SSH客户端;
- 本地SSH客户端解密数据,转发到本地1433端口;
- 本地数据库客户端接收回复,完成通信。
内容的提问来源于stack exchange,提问作者hotmeatballsoup
相关产品推荐
相关产品推荐

