SSH 隧道功能详细文档
功能概述
什么是SSH隧道?
SSH隧道(SSH Tunneling)也称为SSH端口转发,是一种通过SSH协议在本地和远程服务器之间建立加密通道的技术。
应用场景
-
连接防火墙后的数据库
- 数据库位于内网,无法直接访问
- 通过跳板机(Bastion Host)访问内网MongoDB
-
加密不安全的网络连接
- 在公网环境下安全访问MongoDB
- 防止数据传输被窃听
-
统一安全访问入口
- 所有数据库访问都通过SSH隧道
- 集中管理访问权限
工作原理
快速开始
1. 启用 SSH 隧道
安装 monsqlize 后,在 MongoDB config 中添加 ssh 配置即可。monSQLize 会在 connect() 时打开隧道,并在 close() 时关闭隧道。
2. 基础配置(密码认证)
3. 基础配置(私钥认证,推荐)
配置说明
SSH配置项
MongoDB配置项
自动解析规则:
- ✅ 推荐:只配置
uri,系统会自动从URI中解析remoteHost和remotePort - ⚠️ 特殊情况:如果URI中的地址与实际MongoDB服务器地址不同,才需要显式指定
示例对比:
使用示例
示例1:密码认证(简单测试)
示例2:私钥认证(推荐生产环境)
示例3:使用私钥内容
示例4:使用加密私钥
示例5:指定本地端口
示例6:自定义SSH端口
示例7:调整超时设置
故障排查
问题1:SSH连接超时
错误信息:
可能原因:
- SSH服务器地址错误或无法访问
- SSH端口被防火墙阻止
- 网络不稳定
解决方案:
问题2:SSH认证失败
错误信息:
可能原因:
- 用户名或密码错误
- 私钥路径错误或权限不正确
- SSH服务器不允许该认证方式
解决方案:
问题3:MongoDB连接失败
错误信息:
可能原因:
- MongoDB地址或端口错误
- MongoDB认证失败
- MongoDB服务未运行
解决方案:
内置 SSH 隧道只支持 URI 中包含一个 MongoDB host。多 host 副本集 URI 和 mongodb+srv:// SRV URI 会以 INVALID_CONFIG 拒绝;这类拓扑请使用外部 SSH 隧道、跳板代理,或在 MongoDB 网络层开放对应访问。
问题4:端口冲突
错误信息:
解决方案:
最佳实践
1. 使用私钥认证
✅ 推荐:
❌ 不推荐:
2. 使用环境变量存储敏感信息
3. 正确管理SSH密钥
4. 连接池和超时配置
5. 错误处理
6. 日志记录
常见问题
Q1: SSH隧道是否影响性能?
A: 有轻微影响,但通常可忽略不计。
- SSH 隧道建立和传输开销取决于密钥交换、网络路径、加密算法、代理跳数和负载
- 设置超时或容量预算前,应在部署环境测量连接和稳态吞吐
- 适用于大部分应用场景
Q2: 是否支持多个SSH隧道?
A: 支持。每个MonSQLize实例可以建立独立的SSH隧道。
Q3: SSH隧道断开后会自动重连吗?
A: 不会。需要手动重连。如果 SSH 连接在 ready 之后断开,monSQLize 会将隧道标记为未连接并关闭本地转发服务,让后续使用快速失败,而不是静默继续使用已经失效的隧道。
建议实现重连逻辑:
Q4: 是否支持跳板机链(多级SSH)?
A: 不直接支持。需要在SSH服务器上配置ProxyJump。
SSH配置示例(~/.ssh/config):
Q5: Windows上是否支持SSH隧道?
A: 完全支持。monSQLize使用ssh2库(纯JavaScript实现),无需系统SSH客户端。
Q6: 密码认证和私钥认证哪个更好?
A: 私钥认证更安全且推荐。