繁体   English   中英

来自bash脚本的SSH中MYSQL中的嵌套SQL语句

[英]Nested SQL Statement within MYSQL within SSH from bash script

我有一个不幸的情况,我没有从服务器外部访问 MYSQL 数据库的权限。 但是 SSH 是可能的。 因此,我尝试从 bash 文件运行一个简单的 SQL 语句,该语句创建一个 SSH 连接,连接到 MYSQL DB 并运行该 SQL 语句。

语法非常简单,但我无法将它们组合在一个 bash 文件中使用,但在命令行上每个人都在工作

我正在使用的片段:

1)建立SSH连接:

$:sshpass -p my_password ssh my_user@my_server

2)连接到MYSQL数据库:

my_server>mysql -h rdbms -u db_user -D db_name -p db_password

3)运行SQL语句

mysql>SELECT * FROM table

……正如所说。 在命令行上运行时一切都很好。

但是当我将它们组合成一个 bash 文件时:

#!/usr/bin/
sshpass -p my_password ssh my_user@my_server
mysql -h rdbms -u db_user -D db_name -p db_password
SELECT * FROM table

它在第一行(建立 SSH 连接)之后立即停止。 我有什么想法可以结合这些吗?

要通过 ssh 在远程服务器上运行命令,您需要在同一命令行上将该命令作为参数列出。

例如:

sshpass -p my_password ssh my_user@my_server date

这将在远程服务器上运行date ,并返回该命令的输出。

您也可以通过这种方式运行 mysql 客户端。 只需将 mysql 命令放在同一命令行上,作为 ssh 的参数。

sshpass -p my_password ssh my_user@my_server mysql ...arguments...

您可以在行尾使用\\以在下一行继续执行长命令。 它的工作原理就像你在很长的一行上写了完整的命令一样,但在 Stack Overflow 中发布更容易,这样读者就不必水平滚动来阅读它。 :-)

另请注意,远程命令必须用引号引起来,因此它看起来像 ssh 的单个参数。 当它在远程服务器上运行时,它会被扩展为多个参数。

sshpass -p my_password ssh my_user@my_server \
 "mysql ...arguments..."

mysql 客户端有一个选项-e ,您可以使用它来执行 SQL 语句。

sshpass -p my_password ssh my_user@my_server \
 "mysql -h rdbms -u db_user -D db_name -pdb_password -e 'SELECT * FROM table'"

关于密码的一些提示:

  1. -p和密码之间不能有空格。 如果您使用-p并在其后加一个空格,系统会以交互方式提示您输入密码。 空格后面的单词不会被当作密码,除非你把它贴在-p

  2. 我不喜欢在命令行上以明文形式输入密码。 这样做是不安全的,因为任何可以访问您的 shell 历史记录的人都可以查看密码。 最好使用选项文件登录文件 但是您必须将它们放在运行 mysql 客户端的远程服务器上。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM