Linux

使用一個 SSH 會話將 mysql 導出到遠端伺服器

  • June 29, 2015

我遇到過一種情況,我必須創建一個實用的 shell 腳本,該腳本將在來自不同地區的許多伺服器上執行。目標是轉儲本地 mysql 數據庫,將其複製到另一台伺服器並將 mysql 導出到遠端伺服器的數據庫。

該腳本將為此目標讀取使用者的輸入。

問題是我必須避免為同一伺服器打開多個SSH 連接,換句話說,腳本不應該多次詢問 SSH 密碼,而我想到的解決方案最終會要求它至少兩次。

我也有一些限制:我無法更改 ssh 的controlmaster並且伺服器無法安裝sshpass。此外,有些伺服器不是我們自己的,我不能為所有伺服器添加密鑰,因為要求我的腳本應該是一個獨立的方法,在任何外部伺服器中都沒有進一步的更改。

我正在遵循的步驟是:

  1. 我使用 mysqldump 導出數據庫。
  2. 然後我將 .sql 文件scp到目標機器。
  3. 我使用 mysql 導入常式生成了一個新的 .sh 文件。
  4. 然後打開一個新的 ssh 連接到我傳遞 .sh 文件並執行它的目標伺服器。
  5. 我清理了 sql 文件和臨時 sh 文件。

有誰知道執行此常式的更好方法,它可以讓我只使用一個會話來完成所有這些工作?

由於似乎限制更多的是使用者體驗方面(不必一次又一次地輸入密碼),這裡最好的選擇是在目標文件中輸入您的公鑰(.pub文件夾中的文件) 。~/.ssh``~/.ssh/authorized_keys

此處的~文件夾代表相應地在源電腦和目標電腦上涉及的使用者的家。

如果userA@machine1在 上獲得授權,則(並且僅在那時)打開與 的 SSH 連接userB@machine2時不需要密碼。授權純粹通過非對稱加密完成(只有授權使用者應該擁有自己的私鑰),這就是不需要密碼的原因。userA@machine1``userB@machine2

這樣,scpandssh命令仍然是 2 個連接(但總是一次只有一個,而不是同時!),但兩者都完全沒有密碼。

如果您無權訪問伺服器,則必須要求那裡的管理員添加您的公鑰文件。所有涉及的機器只需要您的單個公鑰文件。

實際上,我有一個 cronjob 正在執行,它自己幾乎完成了完全相同的任務(ssh觸發轉儲,然後scp複製,即使使用 MySQL 數據庫),有趣的巧合。;)

引用自:https://unix.stackexchange.com/questions/212602