MySQL Shell 9.0  /  ...  /  使用 SSH 通道

4.3.6 使用 SSH 通道

MySQL Shell 支援使用 SSH 通道連線至 MySQL 伺服器執行個體。SSH 通道可讓未加密的流量透過加密連線傳輸,並允許對受防火牆保護免受外部連線攻擊的伺服器進行授權的遠端存取。

透過使用 SSH 通道的 MySQL Shell 進行連線時,不支援使用 AdminAPI 命令,但部署、啟動、停止、終止及刪除沙箱執行個體的命令除外(dba.deploySandboxInstancedba.startSandboxInstancedba.stopSandboxInstancedba.killSandboxInstancedba.deleteSandboxInstance)。沙箱命令一律在 MySQL Shell 執行個體本機執行。

建立之後,SSH 通道可由從相同遠端伺服器執行個體連線的相同使用者連線至相同主機之間共用。MySQL Shell 函式 shell.listSshConnections() 會列出 MySQL Shell 工作階段中目前已連線且作用中的 SSH 通道,以及 SSH 伺服器和已連線的 MySQL 伺服器執行個體的 URI。如果您指定相同的 SSH 連線詳細資訊,MySQL Shell 會自動重複使用現有的通道。

您可以選取用於連線的 SSH 組態檔案和身分識別檔案(私密金鑰)。當您設定 SSH 通道時,MySQL Shell 會依下列優先順序選取 SSH 組態檔案

  1. 您指定為連線選項的 SSH 組態檔案。

  2. 您使用 MySQL Shell 組態選項 ssh.configFile 設定為預設值的 SSH 組態檔案。如需設定此選項的指示,請參閱第 13.4 節,「設定 MySQL Shell 選項」

  3. 標準 SSH 組態檔案 ~/.ssh/config

除非在 SSH 組態檔案中設定不同的組態,否則已知主機檔案會從預設位置 (~/.ssh/known_hosts) 讀取。

對於身分識別檔案(私密金鑰),您可以在連線時使用 ssh-identity-file 選項指定自訂檔案。沒有選項可設定身分識別檔案的自訂預設值。如果您未指定,SSH 程式庫會使用下列驗證嘗試順序,直到其中一個成功為止

  1. 如果正在使用 SSH 代理程式,則會嘗試使用其中設定的身分識別檔案進行驗證(如果有的話)。

  2. 如果在 SSH 組態檔案中為目標主機指定了身分識別檔案,則會嘗試使用該檔案進行驗證。

  3. 如果上述兩個選項皆不可用或驗證嘗試失敗,則會嘗試使用 SSH 組態資料夾中的標準私密金鑰檔案 (~/.ssh/id_rsa) 進行驗證。

透過 SSH 通道傳輸資料的預設緩衝區大小為 10240 個位元組。您可以透過設定 MySQL Shell 組態選項 ssh.bufferSize 來變更此值。如需設定此選項的指示,請參閱第 13.4 節,「設定 MySQL Shell 選項」

當您使用任何 MySQL Shell 連線方法時(shell.connect() 方法、mysqlsh 命令參數或 \connect MySQL Shell 命令),SSH 通道均可使用。

shell.connect()

當您使用 shell.connect() 方法在 MySQL Shell 執行時連線時,您可以指定要連線至 SSH 伺服器的 URI,或使用鍵值配對取得連線資料。此方法提供以下選項

  • ssh:連線至 SSH 伺服器的 URI。URI 格式為 [使用者@]主機[:埠號]

  • uri:要透過 SSH 通道存取的 MySQL 伺服器執行個體的 URI。URI 格式為 [協定://] [使用者@]主機:埠號。請勿使用基本連線參數(協定使用者主機埠號)來指定 SSH 通道的 MySQL 伺服器連線,只需使用此選項。必須指定埠號。

  • ssh-password:連線至 SSH 伺服器的密碼。

  • ssh-config-file:連線至 SSH 伺服器的 SSH 組態檔案。

  • ssh-identity-file:用於連線至 SSH 伺服器的身分識別檔案。

  • ssh-identity-passssh-identity-file 選項所指定之身分識別檔案的密碼。

當您使用 shell.openSession() 方法時,也可以使用這些選項,此方法與 shell.connect() 的運作方式相同,但會建立並傳回 session 物件,而不是將其設定為 MySQL Shell 的全域工作階段。如需使用此連線方法和可用的其他選項的完整指示,請參閱使用類似 URI 的字串或鍵值配對連線至伺服器

mysqlsh 命令參數

當您在 MySQL 啟動時使用命令列選項進行連線時,您可以指定要連線至 SSH 伺服器的 URI。此方法提供以下選項

  • --ssh:連線至 SSH 伺服器的 URI。URI 格式為 [使用者@]主機[:埠號]。當您使用此選項時,必須在 MySQL 執行個體 URI 中指定連線至 MySQL 伺服器執行個體的埠號。

  • --ssh-config-file:連線至 SSH 伺服器的 SSH 組態檔案。如果您使用空值指定此選項,則會忽略 --ssh.configFile 所指定的自訂預設 SSH 組態檔案,改為使用 ~/.ssh/config 檔案。

  • --ssh-identity-file:用於連線至 SSH 伺服器的身分識別檔案。

如需使用此連線方法和可用的其他選項的完整指示,請參閱第 4.3.1 節,「使用個別參數連線」

\connect MySQL Shell 命令

當您使用 \connect 命令在 MySQL Shell 執行時連線時,您可以指定要連線至 SSH 伺服器的 URI。SSH 連線沒有其他選項,因此您必須使用預設的身分識別檔案 ~/.ssh/id_rsa 和預設的 SSH 組態檔案,該檔案可以是標準檔案 ~/.ssh/config,也可以是您使用 MySQL Shell 組態選項 ssh.configFile 設定的自訂預設值(請參閱第 13.4 節,「設定 MySQL Shell 選項」)。

若要取得其他設定選項,您可以使用 shell.connect() 方法或在 MySQL Shell 啟動時在命令列中建立 SSH 通道,然後使用 \connect 命令重複使用。當您在 MySQL Shell 工作階段中時,您可以使用 shell.listSshConnections() 命令檢視目前已連線的 SSH 通道。

MySQL Shell 的密碼儲存區可以儲存連線至 SSH 伺服器和身分識別檔案的密碼和密碼,以便未來連線時自動擷取。如果您在連線選項中提供密碼或密碼,則會改用儲存在密碼儲存區中的任何密碼。請注意,雖然有允許它的選項,但在連線資料中指定明確密碼是不安全的,因此不建議這樣做。當需要密碼時,MySQL Shell 會以互動方式提示輸入密碼,無論是連線至 SSH 伺服器還是連線至身分識別檔案。例如

mysql-js> shell.connect({uri:"mysql://root:sandbox@192.0.2.3:3306",
        > ssh:"root@198.51.100.4:2222", "ssh-identity-file":"/home/hanna/.ssh/config_pw"})
Creating a Classic session to 'root@192.0.2.3:3306'
Opening SSH tunnel to 198.51.100.4:2222...
Please provide key passphrase for /home/hanna/.ssh/config_pw: ********
Save password for 'file:/home/hanna/.ssh/config_pw'? 
[Y]es/[N]o/Ne[v]er (default No): y
Fetching schema names for autocompletion... Press ^C to stop.
Your MySQL connection id is 7869
Server version: 8.0.28 MySQL Community Server - GPL
No default schema selected; type \use <schema> to set one.
<ClassicSession:root@192.0.2.3:3306>