【问题标题】:SSH directly into MySQL serverSSH 直接进入 MySQL 服务器
【发布时间】:2015-07-16 22:26:52
【问题描述】:

我有一个使用 mysql 数据库运行的远程网络服务器。 现在我使用 SSH 做任何服务器端管理,我经常访问 MySQL。我想知道我是否有可能制作一个可以 ssh 进入服务器的脚本,如果在命令行上使用“-sql”(可能会发生变化)运行,它会进入 mysql。

到目前为止我做了什么:

#!/bin/bash
if [ "$1" == "-l" ]; then
    ssh user@192.168.0.101 //local address for privacy;
    mysql -u root -p;
else
    ssh user@192.168.0.101
fi

这会产生一个 SSH 会话,当它结束时,我的计算机将尝试在本地计算机上创建一个 mysql 连接。

#!/bin/bash
if [ "$1" == "-l" ]; then
    ssh user@192.168.0.101 'mysql -u root -p';
else
    ssh user@192.168.0.101
fi

这会导致密码请求,然后什么也没有。我假设它是因为使用带有命令的 ssh 需要响应,然后关闭连接。

有什么方法可以做到这一点,我意识到这并不重要,但玩起来很有趣

提前致谢

【问题讨论】:

    标签: mysql linux bash ssh


    【解决方案1】:

    mysql 命令仅在其输入为终端时才以交互方式执行。当您使用命令参数运行 ssh 时,它通常不会在服务器上分配伪 tty。所以mysql 只是处理它的标准输入而不显示提示。

    使用-t 选项强制执行此操作:

    ssh -t user@192.168.0.101 'mysql -u root -p'
    

    【讨论】:

      【解决方案2】:

      试试这样。使用命令输入 mysql 密码。所以你不必输入密码。

      ssh user@192.168.0.101 'mysql --user="root" --password="password" --database="database" --execute="My Query;"'
      

      另外我建议您设置基于密钥的 ssh 身份验证。因此,您也可以避免每次都输入 ssh 密码。

      【讨论】:

        【解决方案3】:

        您可能要考虑解决此类访问问题的一个选项是通过使用 ssh 中的隧道工具:

        ssh -l user -L 33306:192.168.0.101:3306 192.168.0.101
        

        或许

        ssh -l user -L 33306:127.0.0.1:3306 192.168.0.101
        

        这会在您的本地计算机 (33306) 上创建一个端口,该端口通过隧道连接到远程计算机上的 mysql 端口 (3306)。

        然后在本地机器上运行 mysql 的本地副本:

        mysql --port=33306 -u root -p
        

        应该通过隧道端口连接到您的数据库。

        【讨论】:

        • 隧道是通往这里的方式,因为您不限于使用命令行客户端。您也可以连接任何类型的应用程序。