You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过SSH调用MySQL的Bash脚本返回权限拒绝错误求助

解决Bash脚本中MySQL远程登录的权限错误与警告问题

我一眼就看出问题出在here-doc的变量解析上,咱们一步步拆解解决:

核心原因:密码中的$被Bash意外解析

你的脚本用了<< EOF的here-doc语法,这种模式下本地Bash会自动解析内容里的变量(比如$xxx格式的内容)。你的密码_kHaTX(!G_$=Y5Xa里包含$=Y5Xa,Bash会把它当作一个变量去尝试展开,但这个变量根本不存在,所以实际传到MySQL的密码变成了_kHaTX(!G_——少了后面的关键部分,自然就触发ERROR 1045的权限拒绝错误了。

快速修复方法

方法1:禁用here-doc的变量解析(推荐)

把<< EOF改成<< 'EOF',用单引号包裹分界符,这样here-doc里的所有内容都会原样传递给远程SSH的shell,不会被本地Bash解析变量:

#!/bin/bash
ssh user@myhost.com << 'EOF'
/usr/bin/mysql -h localhost -u root -p_kHaTX(!G_$=Y5Xa show databases;
EOF

方法2:转义密码中的$符号

如果不想修改分界符,就把密码里的$转义成\$,让Bash把它当作普通字符处理:

#!/bin/bash
ssh user@myhost.com << EOF
/usr/bin/mysql -h localhost -u root -p_kHaTX(!G_\$=Y5Xa show databases;
EOF

处理命令行密码的安全警告

关于[Warning] Using a password on the command line interface can be insecure这个警告,更安全的做法是在远程主机上配置MySQL的客户端配置文件:

  1. 登录到myhost.com,创建~/.my.cnf文件:
[client]
user=root
password=_kHaTX(!G_$=Y5Xa
host=localhost
  1. 设置文件权限为600(避免其他用户读取敏感信息):
chmod 600 ~/.my.cnf
  1. 之后脚本里的MySQL命令可以简化成:
#!/bin/bash
ssh user@myhost.com << 'EOF'
/usr/bin/mysql show databases;
EOF

这样既消除了警告,也避免了在脚本里明文写密码,安全性更高。

内容的提问来源于stack exchange,提问作者user9048585

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:51:47