Documentation Home
MySQL 外壳 8.0  / 第 4 章 MySQL Shell 入门  / 4.3 MySQL Shell 连接  /  4.3.5 使用 SSH 隧道

4.3.5 使用 SSH 隧道

从 8.0.28 版开始,MySQL Shell 支持 SSH 隧道连接到 MySQL 服务器实例。SSH 隧道允许未加密的流量通过加密连接,并允许对受防火墙保护免受外部连接影响的服务器进行授权远程访问。

使用 SSH 隧道从 MySQL Shell 建立的连接不支持使用 AdminAPI 命令,部署、启动、停止、终止和删除沙箱实例(、、、和) 的 dba.deploySandboxInstance命令 dba.startSandboxInstance除外 。沙箱命令始终在 MySQL Shell 实例本地执行。 dba.stopSandboxInstancedba.killSandboxInstancedba.deleteSandboxInstance

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 配置文件 ssh.configFile。有关设置此选项的说明,请参阅 第 13.4 节,“配置 MySQL Shell 选项”

  3. 标准 SSH 配置文件 ~/.ssh/config

已知主机文件是从默认位置 ( ~/.ssh/known_hosts) 读取的,除非在 SSH 配置文件中设置了不同的配置。

对于身份文件(私钥),您可以ssh-identity-file在连接时使用选项指定自定义文件。没有为标识文件设置自定义默认值的选项。如果您不指定一个,SSH 库将使用以下身份验证尝试序列,直到一次成功:

  1. 如果正在使用 SSH 代理,则会尝试使用在那里配置的身份文件(如果可用)进行身份验证。

  2. 如果在 SSH 配置文件中为目标主机指定了身份文件,则会尝试使用该文件进行身份验证。

  3. ~/.ssh/id_rsa如果这些选项都不可用或身份验证尝试失败,则会使用 SSH 配置文件夹 ( ) 中的标准私钥文件尝试进行身份验证。

通过 SSH 隧道传输数据的默认缓冲区大小为 10240 字节。您可以通过设置 MySQL Shell 配置选项来更改它ssh.bufferSize。有关设置此选项的说明,请参阅 第 13.4 节,“配置 MySQL Shell 选项”

shell.connect() 当您使用任何 MySQL Shell 连接方法(方法、mysqlsh命令参数或 \connectMySQL Shell 命令 )时,SSH 隧道可用。

shell.connect()

当您shell.connect()在 MySQL Shell 运行时使用该方法连接时,您可以指定一个 URI 用于连接到 SSH 服务器,或者使用键值对连接数据。此方法提供以下选项:

  • ssh: 连接 SSH 服务器的 URI。URI 格式为 [user@]host[:port].

  • uri:要通过 SSH 隧道访问的 MySQL 服务器实例的 URI。URI 格式为[scheme://] [user@]host:port. 不要使用基本连接参数 ( scheme, user, host, port) 为 SSH 隧道指定 MySQL 服务器连接,只需使用此选项即可。必须指定端口。

  • ssh-password:连接SSH服务器的密码。

  • ssh-config-file:用于连接到 SSH 服务器的 SSH 配置文件。

  • ssh-identity-file:用于连接 SSH 服务器的标识文件。

  • ssh-identity-pass:选项指定的标识文件的密码 ssh-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 节“使用各个参数连接”

\connectMySQL 外壳命令

当您\connect 在 MySQL Shell 运行时使用该命令进行连接时,您可以指定用于连接到 SSH 服务器的 URI。SSH 连接没有其他选项,因此您必须使用默认身份文件 ~/.ssh/id_rsa和默认 SSH 配置文件,它可以是标准文件 ~/.ssh/config或您使用 MySQL Shell 配置选项设置的自定义默认值 ssh.configFile(请参阅 第 13.4 节) ,“配置 MySQL Shell 选项”)。

要获得额外的设置选项,您可以在 MySQL Shell 启动时使用该方法或在命令行上创建 SSH 隧道shell.connect(),然后通过\connect命令重用它。当您处于 MySQL Shell 会话中时,您可以使用该 shell.listSshConnections()命令查看当前连接的 SSH 隧道。

MySQL Shell 的 Secret Store 可以存储用于连接到 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>