当前位置:首页 > 问答 > 正文

ssh连接数据库具体怎么弄,有啥步骤和注意点啊

我们通常不直接用SSH协议去“连接”数据库本身(比如MySQL的3306端口),更常见的需求是,数据库服务器出于安全考虑,只允许在本地服务器内部访问(即只监听127.0.0.1地址),不允许外部网络直接连接,这时,如果你想从你自己的电脑(客户端)去访问这个数据库,就需要先建立一个SSH隧道,把这个被保护的、仅在服务器内部可访问的数据库端口,“映射”到你本地电脑的一个端口上,你再让你的数据库连接工具(如Navicat、DBeaver、甚至命令行)去连接你本地电脑的这个映射出来的端口,SSH隧道会负责将所有发送到本地端口的数据,安全地加密并转发到远程服务器的数据库端口上。

这个过程通常被称为“SSH隧道”或“端口转发”,下面是详细的步骤和关键的注意点。

第一步:准备材料

在开始之前,你需要准备好以下几样东西:

  1. 远程服务器的IP地址或域名123.123.123 或者 your-server.com
  2. SSH登录用户名:通常是 root,或者有sudo权限的普通用户,ubuntu
  3. SSH登录认证方式:这可能是密码,但更安全、更推荐的是使用SSH密钥对,你需要私钥文件(如 id_rsa)。
  4. 数据库的连接信息
    • 数据库类型(MySQL、PostgreSQL等)。
    • 数据库服务器的地址(在SSH隧道模式下,这里填 0.0.1localhost,因为隧道映射到了本地)。
    • 数据库的端口(如MySQL是3306,PostgreSQL是5432)。
    • 数据库的登录名和密码。
    • 你要连接的具体数据库名。

第二步:建立SSH隧道(以最常见的本地端口转发为例)

ssh连接数据库具体怎么弄,有啥步骤和注意点啊

你可以在命令行(终端)里完成,也可以使用图形化工具(如PuTTY、MobaXterm)来设置,这里分别说明。

方法A:使用命令行(MacOS, Linux, 或Windows上的WSL/Git Bash)

命令的基本格式是: ssh -L [本地端口]:[数据库在服务器上的地址]:[数据库端口] [SSH用户名]@[服务器IP] -N -f

举个例子,假设:

ssh连接数据库具体怎么弄,有啥步骤和注意点啊

  • 服务器IP:123.123.123
  • SSH用户名:root
  • 数据库在服务器上本地地址是 0.0.1,端口是 3306
  • 你想映射到你本地电脑的 3307 端口(避免和本地可能已安装的MySQL冲突)

那么命令就是: ssh -L 3307:127.0.0.1:3306 root@123.123.123.123 -N -f

解释一下命令里的参数:

  • -L 3307:127.0.0.1:3306:这是核心,表示建立本地转发,将本地的3307端口转发到服务器上的 0.0.1:3306
  • -N:表示不执行远程命令,只建立隧道。
  • -f:表示让SSH在后台运行。

执行这个命令后,它会提示你输入SSH密码(如果使用密钥且设置了密码,会提示输入密钥密码),然后命令就会在后台运行,隧道就建立好了。

方法B:使用PuTTY(Windows环境下)

ssh连接数据库具体怎么弄,有啥步骤和注意点啊

  1. 打开PuTTY。
  2. 在 “Session” 页面,填写服务器的IP地址和SSH端口(默认22)。
  3. 在左侧导航栏,找到 “Connection” -> “SSH” -> “Tunnels”。
  4. 在 “Source port” 栏填写你本地的端口,3307
  5. 在 “Destination” 栏填写服务器上数据库的地址和端口,0.0.1:3306
  6. 选择 “Local” 单选按钮(表示本地端口转发)。
  7. 点击 “Add” 按钮,你会看到添加的规则出现在列表中。
  8. 回到 “Session” 页面,给你的这个配置起个名字保存一下,方便下次使用,然后点击 “Open” 连接。
  9. 在弹出的命令行窗口中输入SSH用户名和密码,登录成功后,隧道就保持畅通了,不要关闭这个窗口,关闭窗口隧道就断了。

第三步:连接数据库

隧道已经建立,你的本地电脑的3307端口,就相当于远程服务器的3306数据库端口。

打开你的数据库管理工具(如Navicat, MySQL Workbench, DBeaver等),新建一个数据库连接,配置如下:

  • 主机名/IP地址0.0.1localhost (注意,这里填本地,不是填远程服务器IP!)
  • 端口3307 (就是你刚才在 -L 参数里指定的本地端口)
  • 用户名:你的数据库用户名(如 db_user
  • 密码:你的数据库密码

然后进行连接,如果一切顺利,你就可以通过SSH隧道成功访问到远程服务器上的数据库了。

重要的注意点:

  1. 安全是首要目的:这种方法的最大好处是安全,数据库本身不需要暴露在公网上,所有的通信数据(包括数据库查询和结果)都经过SSH加密隧道传输,避免了数据库端口被直接攻击的风险。
  2. 防火墙设置:你只需要确保服务器的SSH端口(默认22)对你是开放的即可,数据库的端口(3306等)完全可以在服务器的防火墙规则中设置为只允许本地访问(0.0.1),这大大增强了安全性。
  3. 本地端口选择:选择本地端口时,避免使用系统已知的常用端口(如80, 443, 22),最好选一个10000以上的端口,或者像例子中那样,用3307来映射远程的3306,这样可以避免和本机可能运行的服务冲突。
  4. SSH密钥认证:强烈建议使用SSH密钥对代替密码登录,因为密钥比密码更难被暴力破解,确保你的私钥文件妥善保管,并且设置强密码保护私钥本身。
  5. 隧道稳定性:SSH隧道可能会因为网络不稳定而中断,如果隧道断开,你的数据库连接也会断,一些工具(如AutoSSH)可以用于监控并自动重建断开的SSH隧道。
  6. 权限问题:确保你用来SSH登录的系统用户,和你用来连接数据库的数据库用户,都拥有足够的权限,这是两套不同的权限体系,SSH用户决定了你能不能登录服务器系统;数据库用户决定了你登录数据库后能做什么操作。
  7. 多跳转发:在某些复杂的网络环境下,你可能需要先登录一台“跳板机”(堡垒机),再从跳板机连接到最终的数据库服务器,这需要用到SSH的代理转发(-A)或多层隧道技术,相对复杂一些。

核心思路就是“借道”SSH这个安全可靠的通道,把原本不对外暴露的数据库服务,“搬运”到你的本地电脑上来访问,只要理解了端口映射的概念,操作起来并不困难。