通过ssh将mysql服务器端口映射到本机端口

本文介绍了一种通过SSH端口映射技术实现从一台服务器远程访问另一台未开放远程访问权限的MySQL服务器的方法。具体步骤包括在目标MySQL服务器上使用SSH命令进行端口映射,然后从另一台服务器通过本地映射后的端口访问目标MySQL数据库。

一台mysql服务器192.168.1.108因安全问题,未开启远程数据访问,可以通过ssh到服务端口映射到另一台服务器192.168.1.188,作为本机端口访问。


1、在192.168.1.108服务器上:

ssh -R 3306:localhost:3306 mysql@192.168.1.188


mysql 为192.168.1.188的操作系统登录名


2、在192.168.1.188机子上,就可以通过本地的3306端口访问到192.168.1.108的mysql数据库




<think>好的,我现在需要解决MySQL服务器3306端口无法远程连接的问题,同时还要了解SSH用户名的配置。首先,我应该从MySQL的配置开始检查,看看是否允许远程连接。通常MySQL默认只监听本地地址,可能需要修改配置文件中的绑定地址。记得配置文件一般是my.cnf或者my.ini,找到bind-address这一项,如果设置为127.0.0.1,就改成0.0.0.0或者注释掉,这样MySQL就会监听所有接口了。 然后,用户的权限问题也很重要。即使MySQL允许远程连接,用户可能没有从远程主机访问的权限。需要用GRANT语句给用户授权,比如允许用户从任何主机连接的话,应该使用'user'@'%',然后刷新权限。此外,防火墙设置也不能忽视,3306端口可能被服务器的防火墙阻止了,需要检查iptables或者ufw的设置,放行3306端口。还有云服务的安全组规则,比如AWS或阿里云,需要确认入站规则是否允许3306端口的流量。 接下来是SSH隧道的问题,如果需要通过SSH跳板机访问MySQL,可能需要建立SSH隧道。这时候SSH的用户名就是登录跳板机的用户名,比如ssh -L 3306:localhost:3306 user@jumpserver,这里的user就是SSH的用户名。还要确认这个用户是否有权限连接到跳板机,并且跳板机本身能访问MySQL服务器的主机和端口。 然后想到DNS解析的问题,如果使用主机名连接MySQL,需要确保DNS解析正确,或者直接在/etc/hosts文件中添加正确的IP和主机名映射,避免连接问题。比如引用中的例子,添加了minipc.lan的解析,这样可以避免因DNS问题导致的连接失败。 最后,可能需要检查MySQL的错误日志,看看是否有更详细的错误信息,帮助定位问题。比如权限错误、连接超时等,日志里通常会有记录。综合这些步骤,逐步排查应该能找到问题所在。另外,测试连接时可以使用telnet或者mysql客户端尝试连接,看看是否能成功,以及具体的错误提示是什么。</think>### MySQL 3306端口远程连接问题解决步骤 #### 1. 检查MySQL配置 - **修改绑定地址** 在MySQL配置文件(`my.cnf`或`my.ini`)中,确认`bind-address`设置为`0.0.0.0`以允许远程连接: ```ini bind-address = 0.0.0.0 ``` 若值为`127.0.0.1`,则仅允许本地连接[^1]。 - **重启MySQL服务** ```bash sudo systemctl restart mysql # Linux系统 ``` #### 2. 配置用户权限 - **授权远程访问** 登录MySQL后,执行以下命令(示例用户名为`remote_user`,密码为`password`): ```sql CREATE USER 'remote_user'@'%' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES; ``` 若用户已存在,直接更新权限: ```sql UPDATE mysql.user SET host='%' WHERE user='remote_user'; ``` #### 3. 检查防火墙规则 - **开放3306端口** - **UFW(Ubuntu)** ```bash sudo ufw allow 3306/tcp ``` - **Firewalld(CentOS)** ```bash sudo firewall-cmd --permanent --add-port=3306/tcp sudo firewall-cmd --reload ``` - **云服务器安全组** 在AWS、阿里云等平台的安全组中,添加入站规则允许`0.0.0.0/0`访问3306端口。 #### 4. 通过SSH隧道连接(可选) 若需通过SSH跳板机访问内网MySQL,使用端口转发: ```bash ssh -L 3306:localhost:3306 SSH用户名@跳板机IP ``` - **参数说明** - `SSH用户名`:登录跳板机的SSH账户名 - `跳板机IP`:中间服务器的公网IP 连接后,本地可通过`mysql -u remote_user -h 127.0.0.1 -p`访问远程MySQL[^1]。 #### 5. 验证DNS解析 若使用主机名连接,确保DNS解析正确或配置`/etc/hosts`: ```bash echo 'MySQL服务器IP mysql-host' | sudo tee -a /etc/hosts ``` 例如: ```bash echo '192.168.99.179 minipc.lan' | sudo tee -a /etc/hosts ``` #### 6. 测试连接 - **Telnet测试端口** ```bash telnet MySQL服务器IP 3306 ``` - **MySQL客户端连接** ```bash mysql -u remote_user -h MySQL服务器IP -p ``` ### SSH用户名配置说明 - **SSH用户名作用** 用于登录跳板机或MySQL所在服务器的身份验证,与MySQL账户无关。 - **配置位置** 在SSH命令中直接指定,例如: ```bash ssh RoseSecurity@pivot.machine # "RoseSecurity"为SSH用户名 ``` ### 常见错误及解决 1. **ERROR 1130 (HY000): Host 'X.X.X.X' is not allowed** → 检查用户权限是否包含远程主机(`'user'@'%'`)并执行`FLUSH PRIVILEGES`。 2. **连接超时** → 确认防火墙、安全组、MySQL绑定地址均已正确配置。 3. **SSH隧道失败** → 检查跳板机的SSH服务状态及用户名/密码是否正确。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值