要通过 Xshell 连接阿里云 ECS 上的数据库,核心在于网络可达性和认证授权。通常有两种主流场景:一种是直接通过 SSH 隧道(Xshell)转发本地端口访问远程数据库;另一种是先登录 ECS 服务器内部再连接数据库。
以下是基于最常见且安全的SSH 隧道转发(Port Forwarding)方式的详细步骤,这种方式无需在 ECS 上开放数据库的公网端口,安全性更高。
1. 准备工作
在开始之前,请确保你已准备好以下信息:
- ECS 实例信息:公网 IP 地址、SSH 用户名(通常是
root或自定义用户)、SSH 私钥文件(.pem或.ppk)。 - 数据库信息:数据库类型(MySQL/PostgreSQL/Redis 等)、监听端口(如 MySQL 默认 3306)、数据库用户名及密码。
- Xshell 配置:已安装并打开 Xshell 客户端。
2. 关键前置检查(阿里云安全组)
这是最容易出错的一步。
- 如果是使用 SSH 隧道方式:
- 只需确保阿里云控制台的安全组规则中,允许了 ECS 的 22 端口(SSH 端口)对您的本地 IP 开放。
- 不需要开放数据库的端口(如 3306),因为流量是通过加密的 SSH 通道转发的。
- 如果是直连方式(不推荐用于生产环境):
- 必须确保安全组规则中,允许了数据库端口(如 3306)对您的本地 IP 或
0.0.0.0/0开放。
- 必须确保安全组规则中,允许了数据库端口(如 3306)对您的本地 IP 或
3. 配置 Xshell 会话
- 打开 Xshell,点击左上角的 “新建” (New)。
- 输入一个会话名称(例如
MyECS)。 - 在“主机”栏填入 ECS 的公网 IP 地址。
- “端口号”默认为
22,“协议”选择SSH。 - 点击右侧的 “用户身份验证”:
- 根据密钥类型选择
publickey(公钥)或password(密码)。 - 如果使用密钥,点击浏览选择你的私钥文件(
.pem需转换为.ppk格式,或直接导入)。
- 根据密钥类型选择
- 点击 “确定” 保存会话。
4. 建立 SSH 隧道(端口转发)
这是实现“通过 Xshell 连接数据库”的核心步骤。我们需要将本地的一个端口映射到 ECS 内部的数据库端口。
- 双击刚才创建的会话,输入密码或使用密钥登录成功。
- 登录成功后,右键点击左侧会话列表中的该会话,选择 “属性” (Properties)。
- 在左侧菜单树中找到 “连接” -> "SSH" -> "隧道” (Tunnel)。
- 注意:不同版本 Xshell 路径可能略有差异,通常在“连接”下的子菜单中。
- 勾选 “启用本地端口转发” (Enable Local Port Forwarding)。
- 添加新规则:
- 源主机 (Source Host):
localhost(代表你的电脑) - 源端口 (Source Port): 选择一个本地空闲端口,例如
3307(不要与本机已有服务冲突)。 - 目标主机 (Destination Host):
localhost(代表 ECS 服务器内部) - 目标端口 (Destination Port): 数据库的实际端口,例如
3306(MySQL)。
- 源主机 (Source Host):
- 点击 “添加” (Add),然后 “确定” 保存。
原理说明:此时,当你访问本机的
localhost:3307时,Xshell 会通过加密的 SSH 通道自动将流量转发到 ECS 内部的localhost:3306。
5. 连接数据库
现在你可以使用任何数据库客户端(如 Navicat, DBeaver, 命令行 mysql 等)连接数据库,而无需直接暴露数据库端口。
方式 A:使用图形化工具(推荐)
以 Navicat 为例:
- 主机 (Host):
127.0.0.1或localhost - 端口 (Port): 你在第 4 步设置的本地端口(如
3307) - 用户名/密码: 填写数据库的用户名和密码。
- 点击测试连接,如果显示成功,即表示通过 Xshell 隧道连接正常。
方式 B:使用命令行
在你的本地终端(Windows CMD/PowerShell 或 Mac/Linux Terminal)中输入:
mysql -h 127.0.0.1 -P 3307 -u your_db_user -p
系统会提示输入数据库密码,输入后即可进入数据库交互界面。
常见问题排查
- 连接超时:
- 检查本地防火墙是否拦截了 Xshell 的本地端口。
- 确认 Xshell 会话已成功登录(隧道建立在登录后)。
- 再次检查阿里云安全组,确认 22 端口 对你当前的公网 IP 是开放的。
- 权限拒绝 (Access Denied):
- 这通常是数据库层面的问题。登录 ECS 后执行
mysql -u root -p,检查该数据库用户是否允许从%(任意 IP) 或localhost连接。 - 对于云数据库 RDS,需在阿里云控制台修改白名单,但如果是自建数据库,需在数据库内执行
GRANT ALL PRIVILEGES ON ... TO 'user'@'%' IDENTIFIED BY 'password';。
- 这通常是数据库层面的问题。登录 ECS 后执行
- 密钥无法识别:
- 确保使用的是
.ppk格式的私钥。如果是阿里云下载的.pem文件,请使用 PuTTYgen 工具转换。
- 确保使用的是
通过以上步骤,你就可以在不直接暴露数据库公网端口的情况下,利用 Xshell 的安全隧道高效地管理阿里云 ECS 上的数据库。
云小栈