warpgate堡垒机连接MySQL的注意事项

warpgate堡垒机

官网地址:Home - Warpgatehttps://warpgate.null.page/是个轻量级的堡垒机,支持ssh、http、mysql、PostgreSQL连接以及record审计。只有1个30M单文件,占用资源极少,刚启动时占用内存20M,有连接时一般也就90M-160M内存占用。不像其他的堡垒机最低要求2C8G内存,是真的要再另外买一台云服务器才运行的起来。

网上对warpgate堡垒机介绍的文章很多,但都是机翻官网首页介绍赚波流量,没有一个详细说明怎么用的,一点营养也没有。ssh、http很简单基本上大家都能配置连接。但是MySQL连接,很多人配置不成功连接不上。

warpgate堡垒机连接MySQL的注意事项

1. warpgate的MySQL protocol协议版本是8.0.0,也就是支持连接MySQL server 8.0.*版本、5.x版本,如8.0.32,8.0.40,8.0.42,8.0.44...5.0、5.7...。8.4.x版本连接不了

MySQL 8.4.x会报1个1045的验证错误,用户(using password: NO),验证不通过被拒绝

Target connection failed client_ip: ::ffff:10.89.1.1 error:protocol error: handshake failed: ErrPacket { error_code: 1045, sql_state: Some("28000"), error_message: "Access denied for user 'root'@'10.89.1.2' (using password: NO)" }

发现是warpgate连接MySQL server 8.4.x只传了用户名没传用户密码过去

GitHub上有人提了issue,开发者看到了把这个issue标记为了bug,目前状态仍为open,还没解决

mySQL target is not working with error Access denied (using password: NO) · Issue #951 · warp-tech/warpgate


2. MySQL server的密码验证插件要是mysql_native_password

  • 修改/etc/my.cnf,重启MySQL server
[mysqld]
default-authentication-plugin=mysql_native_password
  • 进入MySQL shell查看插件启用情况
SHOW PLUGINS;
  • 改密码验证插件
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'your password';
FLUSH PRIVILEGES;

3. MySQL客户端软件要开启sslmysql_clear_password明文密码选项

  • 支持这个明文密码选项的客户端有MySQL官方客户端 MySQL Workbench、HeidiSQL
  • Navicat Premiurm Lite、DBeaver这2个客户端没有mysql_clear_password选项可以开启,但实测可以连上。

4. 改用户密码验证插件的时候如果是docker部署的MySQL容器,要改root@%这个用户。因为MySQL的localhost和网络接口层、web服务器的localhost意义不一样。网络接口层、web服务器的localhost是指127.0.0.1:::1。而MySQL的localhost指的是unix socket即本地进程间通信,127.0.0.1则是基于ip的tcp通信。从容器外访问MySQL server不可能是本地进程间通信,而是基于ip的tcp通信,所以不是root@localhost这个用户,是root@%这个用户

5.warpgate MySQL配置

如果碰到TLS stream error,把TLS mode 设为 Disabled

Target connection failed client_ip: ::ffff:10.89.1.1 error:TLS stream error: I/O: received fatal alert: HandshakeFailure

6.MySQL workbench客户端配置

 7.HeidiSQL客户端配置

8.Navicat Premium Lite客户端配置

9.DBeaver客户端配置

  • DBeaver客户端用MySQL连接warpgate会报 Unknown system variable 'query_cache_size'错误。
  • 原因是:在 MySQL 5.7.20 版本中,查询缓存功能已被弃用,并在 MySQL 8.0 中被移除。因此,如果你使用的是 MySQL 8.0 或更高版本,但驱动程序版本较低,就会出现此错误。
  • 查看warpgate session日志发现自动发送了一句sql查询语句
    
    SQL client_ip: ::ffff:127.0.0.1 query: /* mysql-connector-j-8.0.32 (Revision: fa4912a849140828e48162a2c396c8df0091bed7) */SELECT @@session.auto_increment_increment AS auto_increment_increment, @@character_set_client AS character_set_client, @@character_set_connection AS character_set_connection, @@character_set_results AS character_set_results, @@character_set_server AS character_set_server, @@collation_server AS collation_server, @@collation_connection AS collation_connection, @@init_connect AS init_connect, @@interactive_timeout AS interactive_timeout, @@license AS license, @@lower_case_table_names AS lower_case_table_names, @@max_allowed_packet AS max_allowed_packet, @@net_write_timeout AS net_write_timeout, @@performance_schema AS performance_schema, @@query_cache_size AS query_cache_size, @@query_cache_type AS query_cache_type, @@sql_mode AS sql_mode, @@system_time_zone AS system_time_zone, @@time_zone AS time_zone, @@tx_isolation AS transaction_isolation, @@wait_timeout AS wait_timeout
    

大概是jdbc MySQL驱动包和warpgate MySQL protocol协议兼容的问题,jdbc驱动发现warpgate MySQL protocol是5.x版本,所以发送了 @@query_cache_size AS query_cache_size,但是warpgate msyql protocol不是8.0.0版本的吗?很奇怪。估计warpgate MySQL protocol是做了兼容5.x版本协议的,可以被识别成5.x版本,也可以被识别成8.0.0版本。结果DBeaver的MySQL jdbc驱动直接把warpgate MySQL protocol识别成5.x版本,发送了@@query_cache_size AS query_cache_size语句,导致8.0.X版本MySQL server报 Unknown system variable 'query_cache_size'错误。

也有人碰到了同样的问题,在官方GitHub上提issue了,但是官方没回应mysql target: mysql-connector-j + waprgate issue · Issue #947 · warp-tech/warpgate

更换了DBeaver MySQL各个版本的驱动包都不起作用,问题应该是出在warpgate MySQL协议这一边。一度想放弃这个DBeaver客户端,后来发现用DBeaver的MariaDB可以连接,不会发送那句sql语句。

客户端配置如下:

DBeaver 的MySQL可以连MySQL5

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值