一、准备知识

什么是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来完成了。

为什么要使用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.52os.net/mysql-server-replication-config.html

参考文档

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