【问题标题】:Create user to MySQL with ssh [closed]使用 ssh 创建用户到 MySQL [关闭]
【发布时间】:2021-05-08 23:00:43
【问题描述】:

我正在尝试使用以下命令从 ssh 创建一个 mysql 用户:

sshpass -p "PASSWORD" ssh -t -o StrictHostKeyChecking=no USER@IP "echo "CREATE USER 'NAME'@'localhost' IDENTIFIED BY 'MDP'" | mysql"

但它不起作用

ERROR 1064 (42000) at line 1: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'MDP' at line 1

一个想法?

【问题讨论】:

  • 我不确定这是否是唯一的问题,但我看到不平衡的引号 "echo "CREATE USER。您打开了两个",但只关闭了一个。
  • 我的问题写错了,我的错

标签: mysql ssh


【解决方案1】:

问题是您似乎在双引号字符串中使用了双引号:

sshpass -p "PASSWORD" ssh -t -o StrictHostKeyChecking=no USER@IP "echo "CREATE USER 'NAME'@'localhost' IDENTIFIED BY 'MDP'" | mysql"
                                                                 ^     ^

我在上面的行中指出了两点。第一个打开一个双引号字符串。我想你相信第二个会打开另一个双引号字符串,但实际上它终止第一个双引号字符串。

引用在 shell 语言中是一件棘手的事情。

我建议这个替代方案:

echo "CREATE USER 'NAME'@'localhost' IDENTIFIED BY 'MDP'" | sshpass -p "PASSWORD" ssh -t -o StrictHostKeyChecking=no USER@IP "mysql"

使用这种替代方法,双引号字符串中没有双引号字符串。

我不熟悉sshpass,所以我不知道它是否会改变这一点,但通常你可以通过管道输入ssh,让它成为远程运行命令的输入(在这种情况下,mysql )。

【讨论】:

  • 感谢您的回复!不幸的是,它不起作用。但我有另一个错误消息:伪终端将不会被分配,因为标准输入不是终端。并且仅使用 ssh : ERROR 1396 (HY000) at line 1: Operation CREATE USER failed for 'NAME'@'localhost'
  • 删除 ssh 命令的 -t 选项。
  • 没有 -t : ERROR 1396 (HY000) at line 1: Operation CREATE USER failed for 'NAME'@'localhost'
  • 该错误可能有多种原因。用户已经存在,或者用户已经创建,然后被删除。您可以尝试FLUSH PRIVILEGES 让已删除的用户被完全删除。查看更多信息:bugs.mysql.com/bug.php?id=28331
  • 嗨!谢谢你在目标服务器上尝试 FLUSH PRIVILEGES 后它的工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-16
  • 2017-08-08
  • 2013-04-15
  • 1970-01-01
  • 2017-08-13
  • 2012-06-20
  • 1970-01-01
相关资源
最近更新 更多