一、准备知识

1.1 什么是 autossh?

假设有两台主机: A 主机为外网,B 主机为内网
通常来说外网主机 A 是无法直接连接到内网主机 B 的,这时如果要实现 A 主机通过 ssh 连接 B 主机,通常来说有两种方法:

  1. 端口映射: 将 B 主机的 ssh 端口映射到 B 的外网 ip,当然这要通过设置防火墙来实现
  2. ssh 的反向连接: B 主机通过 ssh 连接到 A 主机,并在 A 主机上打开一个端口进行监听。这时如果 A 主机连接本机的这个端口就可以实现控制 B 主机
ssh -NfR 1111:localhost:2222 user1@外网主机A -p22

2222 为 A 主机在 B 打开的监听端口,1111 为 A 主机本地的端口,这时访问 B 主机的 2222 端口就映射在 A 主机的 1111 端口了。这个也叫远程端口映射。

这种反向连接很有用,但是很不稳定,经常断开。每次断开都要重新执行上面的命令,如果想要断开时自动执行这个命令,这就需要 Autossh 来完成了。

1.2 为什么要使用 ssh 来完成 mysql 的主从同步?

和上面的情况一样,一台内网主机要和一台外网主机做主从同步

二、实现步骤

2.1 生成密钥

登陆内网主机 B 上执行下面的命令来生成 ssh 密钥,一路回车就可以

ssh-keygen -t rsa

2.2 上传密钥

将内网主机 B 生成的 pub 文件上传到 A 主机

ssh-copy-id -i .ssh/id_rsa.pub user@外网主机A

或者将 id_rsa.pud 文件 scp 过去,执行

cat id_rsa.pub >> ~/.ssh/authorized_keys

2.3 启用证书

编辑 A 主机上的 /etc/ssh/sshd_config, 去掉以下三行的注释:

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys

2.4 测试登陆

这时 B 主机 ssh 到外网 A 主机就使用证书登陆了,不用输入密码了

2.5 安装软件

这里就用到了上面的 autossh,内网主机 B 需要安装 autossh,A 主机不需要

wget http://www.harding.motd.ca/autossh/autossh-1.4c.tgz
tar -xf autossh-1.4c.tgz
cd autossh-1.4c
./configure
make install

2.6 端口映射

在内网主机 B 上使用 autossh 将本机的 13306 端口映射到外网主机 A 的 3306 端口

autossh -M 20522 -f -N -L 13306:localhost:3306 user@外网主机A

2.7 mysql 同步

这时就可以使用本机的 13306 端口进行 MySQL 服务器的同步了

MySQL 服务器如何配置主从同步请参见:

http://www.nixops.me/mysql-server-replication-config.html

参考文档

http://www.cnblogs.com/eshizhan/archive/2012/07/16/2592902.html