【问题标题】:Bash script to SSH to a server and connect to DBBash 脚本通过 SSH 连接到服务器并连接到数据库
【发布时间】:2014-07-18 18:31:55
【问题描述】:

我想通过一个 shell 脚本测试与数据库的连接,该脚本将通过 SSH 连接到多个盒子,然后测试 mysql 连接。我有 SSH 密钥,所以我没有在 ssh 命令中明确指定 user@server。该脚本没有像我预期的那样工作,并提示我输入密码但错误并使用密码作为数据库名称。有没有人可以指教一下?

#!/bin/bash

SERVER_LIST=(172.10.1.1 172.10.1.2 172.10.1.3)
CONNECTION=172.0.0.10
USER="username"
PASS="password"

echo "Testing connectivity... "
for SERVER in ${SERVER_LIST[@]}
do
    echo "SSHing to $SERVER"
    ssh $SERVER "mysql -h $CONNECTION -u $USER -p$PASS"
done
echo "Finished."

经过一番阅读后,我是否应该在密码提示符下使用 expects 命令或类似命令?我已经尝试过这种方法无济于事......

【问题讨论】:

  • 您的密码有特殊字符吗?你能告诉我们你在执行脚本时得到了什么吗?
  • 确定输入密码:密码错误1049(42000):未知数据库'密码'
  • 首先,在 bash 脚本和 ssh 之外尝试使用 mysql 命令。然后使用 ssh 命令和 bash 脚本对其进行测试。如果您不使用root用户,我认为您必须指定一个数据库名称。

标签: mysql bash ssh


【解决方案1】:

您必须将您的公钥导出到服务器中 .ssh 文件夹中的 authorized_keys

  1. 生成您的密钥

    ssh-keygen -t rsa

  2. 如果不存在,则在服务器上创建 .ssh ssh b@B mkdir -p .ssh

  3. 将它们发送到服务器

    cat .ssh/id_rsa.pub | ssh b@B 'cat >> .ssh/authorized_keys'

  4. 测试您的登录信息

    ssh b@B

如果出现任何问题,请使用ssh -v b@B 解决问题

【讨论】:

  • 对不起,我应该提到我有 ssh 密钥来建立 SSH 连接,据我所知,ssh 连接不是问题,因为我可以进入盒子,它是问题所在的 mysql 连接
【解决方案2】:
Enter password: password ERROR 1049 (42000): Unknown database 'password'

从错误消息中,mysql 客户端错误地将 password 理解为 DB 名称。如果它要求输入密码,这意味着它收到了-p 选项没有密码。因此,如果客户端收到命令mysql .... -p password(注意p 之后的空格),所有行为都会如此。

我的猜测是在某个地方的密码之前有一个 空格。也许在以下行:

PASS="password"

如果您复制粘贴了该密码,则可能前面有一个 invisible 字符 (zero-width space?)。尝试删除,然后手写该行。

此外,请尝试正确引用(不是那个正确的:如果您的任何变量包含',这将不起作用)。至少,这可能有助于缩小问题范围:

ssh "$SERVER" "mysql -h '$CONNECTION' -u '$USER' -p'$PASS'"

【讨论】:

  • 我同意你的看法,这就是我在 password 中要求的特殊字符。
  • @kranteg 是的,我昨天对你的评论投了赞成票。我要指出,一些“特殊字符”可能确实是“无意的”和“不可见的”。我已经遇到过用户从他们的 webmail 复制粘贴他们的登录名/密码的问题。出于格式化的目的,当用户从浏览器复制原始文本时,添加并潜入了一些不可见的字符。不过,这是高度投机的。如果没有 OP 的进一步反馈,我认为我们从现在开始就陷入困境。
猜你喜欢
  • 1970-01-01
  • 2018-01-28
  • 2020-03-16
  • 2019-03-30
  • 1970-01-01
  • 2015-09-04
  • 2018-09-10
  • 1970-01-01
相关资源
最近更新 更多