如何在VPS上使用SSH保护MySQL复制

来自菜鸟教程
跳转至:导航、​搜索

red 中的所有命令都必须替换为您的环境中使用的实际值。

序幕

配置 MySQL 复制使端口 3306 对 Internet 开放,并且复制服务器之间的数据未加密。 使用 SSH 隧道可以通过 SSH 连接传输 MySQL 复制数据。 此方法不需要在防火墙中打开任何其他端口。 对于这篇文章:

  • 主IP为1.1.1.1
  • 从机IP为2.2.2.2

要输入到主站的命令标记为 (master),用于从站的命令标记为 (slave)

假设您'已经阅读了这篇关于MySQL复制的文章

第 1 步:设置 SSH 隧道

创建用户并分配密码。 此用户将用于创建 SSH 隧道:(master)

root@mysql-master:~# useradd -d /home/tunneluser -m tunneluser
root@mysql-master:~# passwd tunneluser

必须允许 tunneluser 仅从从服务器连接,因此必须以允许用户的身份将其输入到 /etc/ssh/sshd_config 文件中。 (主)

root@mysql-master:~# nano /etc/ssh/sshd_config

由于定义了允许的用户,不在此列表中的用户将被拒绝访问,因此添加将使用 SSH 登录此 VPS 的管理用户。 (主)

AllowUsers root alice bob tunneluser@2.2.2.2

重启SSH服务器:(master)

root@mysql-master:~# service ssh restart

这篇文章中提到了生成SSH密钥的步骤,但我'将在这里重复命令。 (从)

[root@mysql-slave ~]# ssh-keygen

样本输出:

[root@mysql-slave ~]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
5d:db:9c:50:e8:b2:88:18:de:78:5f:ed:83:14:47:d7 root@mysql-slave
The key's randomart image is:
+--[ RSA 2048]----+
|             ... |
|            o.. E|
|           oo.   |
|    .    .o.o= . |
|   . = .S..*. +  |
|    + + . + .    |
|     . . o o     |
|        . . o    |
|             .   |
+-----------------+

请勿输入密码,因为此密钥将用于自动建立 SSH 隧道,如果它包含密码则无法实现。 将公钥复制到主服务器。 (从)

[root@mysql-slave ~]# ssh-copy-id tunneluser@1.1.1.1

样本输出:

[root@mysql-slave ~]# ssh-copy-id tunneluser@1.1.1.1
The authenticity of host '1.1.1.1 (1.1.1.1)' can't be established.
RSA key fingerprint is 3f:33:0c:73:bd:da:51:b9:45:2e:d7:2e:00:47:33:17.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '1.1.1.1' (RSA) to the list of known hosts.
tunneluser@1.1.1.1's password:
Now try logging into the machine, with "ssh 'tunneluser@1.1.1.1'", and check in:

  ~/.ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

tunneluser 用户将仅用于隧道而不用于管理,因此将 shell 更改为 nologin 并删除密码。 (主)

usermod -s /sbin/nologin tunneluser
passwd -d tunneluser

Debian 和 Ubuntu 用户将 /sbin/nologin 替换为 /usr/sbin/nologin

使用以下命令创建 SSH 隧道。 (从)

ssh -L 33061:localhost:3306 tunneluser@1.1.1.1 -f -N

隧道已创建,因此在 localhost 访问端口 33061 将通过 SSH 将 slave 连接到 master。 -f 参数在后台运行此命令,-N 参数表示“不执行命令”,因为隧道用户具有 nologin shell。

第 2 步:MySQL 配置更改

本节仅提及这篇文章关于MySQL复制的步骤中的更改。所有要更改的内容都在橙色中提到。 如果编辑 my.cnf 文件以侦听公共 IP 地址,请将其更改回 localhost。

(主)(从)

root@mysql-master:~# nano /etc/mysql/my.cnf

以下行:

bind-address   = 1.1.1.1

将更改为 localhost IP 地址:

bind-address   = 127.0.0.1

slave_user 的权限更改为仅从 localhost 登录。 (主)

root@mysql-master:~# mysql -u root -p
mysql>GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'localhost' IDENTIFIED BY 'password';

先前输入的 CHANGE MASTER 查询指向主服务器的公共 IP 地址,并且 ' 没有指定端口号。 以下查询将改变这一点。 (从)

root@mysql-slave:~# mysql -u root -p
mysql>STOP SLAVE;
mysql>CHANGE MASTER TO MASTER_HOST='127.0.0.1',MASTER_USER='slave_user', MASTER_PASSWORD='password', MASTER_PORT=33061, MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=107;
mysql>START SLAVE;

可以使用以下命令从从站测试连接性:(slave)

mysql -h 127.0.0.1 -u slave_user -P 33061 -p

请不要将 localhost-h 参数一起使用,因为 MySQL 将使用默认端口号在本地登录。

提交人:Jesin A