完全免责声明:我来自数据世界,对 Unix 和网络的经验有限。
- 我在 Linux 5.15.36 上运行 Mysql (比如服务器A),并且我配置了一个运行Linux 5.10.102的跳转服务器(服务器B)。
- 从服务器B到服务器A,我可以通过 SSH 连接。
- 然后我有一个在无服务器环境中运行的 SQL 客户端(为简单起见,我们将其称为服务器C) 那无法使用 SSH用于身份验证。它使用SQL协议进行连接和验证,即用户/密码、端口、服务器地址。
考虑到我描述的约束,是否可以通过跳转服务器以某种方式配置隧道,以便 SQL 客户端服务器C将连接到运行的 mySQL 数据库服务器A?
答案1
错误答案:
From what you decscribe, the following setup should satisfy your needs:
1. Configure a ssh ProxyJump to Server A via Server B
2. Open a tunnel to Server A via Server B forwarding localhost:3306 to Server_A:3306
The configuration for the tunnel would be specified in `~/.ssh/config` like this:
```
Host ServerA
HostName FQDN.SERVER-A
# your user and ssh key for ssh to server A
User <the user>
IdentityFile <users ssh key>
# Be sure `user` can ssh to server B from server C
ProxyJump [email protected]
LocalForward localhost:3306 localhost:3306
```
Then open the tunnel from ServerC with
```
ssh -N -f ServerA
```
and then try the `mysql-client` on ServerC.
If you have problems, first try `ssh ServerA` after killing the backgrounded ssh above, and see if that works.
希望正确的答案:
- 在服务器B上创建转发配置。
- 使用 a 在 ServerA 和 ServerB 上创建用户,并在 ServerA 上
ssh keypair
输入公共 ssh 密钥。.ssh/authorized_keys
ssh-copyid ..
- 从 ServerA 从 ServerB 登录一次,以创建主机密钥条目或禁用主机密钥检查(见下文)。
- 打开从服务器 B 到服务器 A 的隧道。
- 通过 MySql 从服务器 C 连接到服务器 B。
1.) ServerB 上的转发配置(这里是作为用户配置完成的。也可以通过 ssh 服务器配置来完成,但到目前为止我没有使用它)/home/sshuser/.ssh/config
是:
Host ServerA
HostName FQDN.SERVER-A
# your user and ssh key for ssh to server A
User <the user>
IdentityFile <users ssh key>
LocalForward LAN-IP-SERVER-B:3306 LAN-IP-SERVER-A:3306
# disable host key checking
# StrictHostKeyChecking no
2.) 在 ServerB 上创建 ssh 登录用户和 ssh 密钥对,在 ServerA 上创建用户,然后将 ssh 公钥复制到 ServerA:
root@ServerA $>useradd sshuser
root@ServerA $>passwd sshuser
....
root@ServerB $>useradd sshuser
root@ServerB $>sudo -i sshuser
sshuser@ServerB $>ssh-keygen -t rsa -b 2048
sshuser@ServerB $>ssh-copyid sshuser@ServerA
...
3.) 从 ServerB 登录到 ServerA,如果严格的主机密钥检查已启用:
sshuser@ServerB $> ssh sshuser@ServerA
4.) 打开从 ServerB 到 ServerA 的隧道
sshuser@serverB: $> ssh -N -f ServerA
5.) 然后使用服务器 C 上的 MySQL 客户端连接到:
mysql://mysluser-on-server-a:password@ServerB:3306
您将连接到ServerA 的凭据到服务器 B 并通过 ssh 隧道自动转发到服务器 A。
下一步是自动设置从 ServerB 到 ServerA 的隧道,这样您就不必按照步骤 2 中所述手动执行此操作。
注意事项:您可能需要调整 MySql ServerA 上的登录权限以允许用户使用某些远程主机。