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

4.3.6 使用 SSH 通道

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

從 MySQL Shell 使用 SSH 通道建立的連線上,不支援使用 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 連線方法時,可以使用 SSH 通道 - shell.connect() 方法、mysqlsh 命令參數或 \connect MySQL Shell 命令。

shell.connect()

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

  • ssh:用於連線至 SSH 伺服器的 URI。URI 格式為 [user@]host[:port]

  • uri:要透過 SSH 通道存取的 MySQL 伺服器執行個體 URI。URI 格式為 [scheme://] [user@]host:port。請勿使用基本連線參數 (schemeuserhostport) 來指定 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 格式為 [user@]host[:port]。當您使用此選項時,必須在 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>