【问题标题】:Bash script for interactive ssh and mysql commands用于交互式 ssh 和 mysql 命令的 Bash 脚本
【发布时间】:2017-03-18 23:26:53
【问题描述】:

我正在学习MySQL,每次都必须学习

  1. 输入ssh XXX@XXX命令,输入我的学校服务器密码。
  2. 输入mysql -u XXX -p命令,输入MySQL密码。

我想创建一个 Bash 脚本来自动执行上述步骤。

我可以用这段代码完成第一步:

#!/usr/bin/expect -f    
set address xxx.com   
set password xxx  
set timeout 10   
spawn ssh xxx@$address   
expect {    "*yes/no" { send "yes\r"; exp_continue}    "*password:" { send "$password\r" }  }  
send clear\r 
interact

但我不知道如何自动输入下一条命令(mysql -u xxx -p)和密码。

我该怎么做?

【问题讨论】:

    标签: mysql linux bash ssh


    【解决方案1】:

    你不需要这么复杂的脚本就可以在远程机器上进入 MySQL 控制台。使用ssh 工具的功能:

    ssh -tt user@host -- mysql -uuser -ppassword
    

    -t 选项强制进行伪终端分配。多个-t 强制分配tty,即使ssh 没有本地tty(参见man ssh)。注意-p 选项的使用。 -p 和密码之间不能有空格(参见mysql 的手册)。

    如果可以从本地计算机访问 MySQL 主机,甚至可以直接通过 mysql 连接:

    mysql -hhost -uuser -p
    

    别忘了调整shebang:

    #!/bin/bash -
    

    【讨论】:

    • 如果我想创建一个 bash 文件来运行这些步骤,我的意思是我只是打开文件,然后所有命令都会在终端中正确输入。
    • @J.Pei,您当然可以将命令放入文件中。不要忘记相应地调整she-bang线。
    • 那么,“-tt”的效果是将2个命令(ssh ...和mysql ...)组合到一个命令行?@Ruslan Osmanov
    • @J.Pei,不,-tt 强制伪终端分配。你需要一个用于交互式会话的伪终端。否则,会话可能会停止等待输入,甚至失败。
    【解决方案2】:

    使用 my.cnf 像 ssh 密钥一样安全地存储您的密码。

    https://easyengine.io/tutorials/mysql/mycnf-preference/

    同样的方式 ssh 也可以通过 ssh -i 参数并传递远程主机的私钥路径。

    祝你好运!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-07
      • 2012-10-23
      • 1970-01-01
      • 2021-11-14
      • 1970-01-01
      • 2015-12-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多