0

我需要在远程服务器上执行一个 mysql 命令,但是在执行实际的 mysql 位时似乎遇到了问题

#!/usr/bin/expect -f
spawn /usr/bin/ssh -t root@10.0.0.2
expect "password: "
sleep 1
send "password\r"
sleep 2
/usr/bin/mysql databasename -e "update device_log set status = 'Y' where device_id in ('1','2');"

基本上我想在设备 ID 的 1&2 上将标志更改为 Y

但脚本输出

无效的命令名“/usr/bin/mysql”

4

2 回答 2

2

mysql只需将命令附加到命令即可ssh一次性运行它,如下所示:

#!/usr/bin/expect -f
spawn /usr/bin/ssh -t root@10.0.0.2 /usr/bin/mysql databasename -e "the query"
expect "password: "
sleep 1
send "password\r"

我不是很喜欢expect,但我希望您在该mysql行中的尝试实际上不是有效的语法,以便运行命令。

此外:

  • 应该使用 SSH 密钥进行无密码登录,而不是在脚本中硬编码根密码。
  • 考虑远程运行 MySQL mysql -h 10.0.0.2 -e "the query",或者
  • 在 SSH 中使用端口转发安全地连接到 MySQL,例如ssh -L 3307:localhost:3306 root@10.0.0.2在后台运行,然后连接到 localhost 上的 TCP 端口 3307 mysql -h 127.0.0.1 -P 3307
于 2013-05-30T12:25:54.930 回答
0

听起来这/usr/bin/mysql不是该mysql远程服务器上二进制文件的路径。mysql假设二进制文件位于远程服务器的PATH. 否则,您将不得不去找出二进制文件的实际位置并相应地更改绝对路径。

于 2013-05-30T12:25:47.813 回答