[英]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'"
關於密碼的一些提示:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.