我需要在远程服务器上执行 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”
最佳答案
只需将 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
行中的尝试实际上并不是expect运行命令的有效语法.
另外:
- 您应该使用 SSH key 进行无密码登录,而不是在脚本中硬编码 root 密码。
- 考虑远程运行 MySQL,例如
mysql -h 10.0.0.2 -e“查询”
,或 - 在 SSH 中使用端口转发来安全地连接到 MySQL,例如在后台运行 ssh -L 3307:localhost:3306 root@10.0.0.2 ,然后连接到 localhost 上的 TCP 端口 3307 mysql -h 127.0.0.1 -P 3307 。
关于mysql - 通过bash脚本在远程服务器上执行mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16835985/