ssh和sshpass王炸组合,解决mysql等一些数据库在代码里远程登陆问题

1. 背景:

       1)在日常开发中,服务器mysql不给开远程登陆,登陆mysql服务器只能用到ssh key,这样我们在navicat里是可以链接上的(用ssh隧道),但是在代码里如何连呢,难为我了

      2)如果开发中我们需要链接B服务器上的mysql,可是B服务器只对A服务器开通了链接权限,而我们是在本地开发,这个在navicat里也可以搞定,但是但是在代码里...

2. 方案:

     ssh -fNg -L 3307:127.0.0.1:3306 myuser@remotehost(这条命令就是把remotehost这台机器的mysql映射到了本地3307端口上)

    参数解释:

    3307:  本地端口

    127.0.0.1:  可以是remotehost的本地地址,也可以是B服务器的地址

    3306: 远程服务器的端口

    myuser: 跳板机的用户名

    remotehost:跳板机的ip

   执行完后,我们本地就可以使用IP为127.0.0.1和端口号3307链接到remotehost这台机器的mysql

   当运行完这条命令后,需要输入remotehost这台机器的登陆密码,麻烦,太麻烦,如果断网,会自动断开链接,还得重新输入密码。

3. 解决办法

   今天只讲mac板解决方案

    Mac 安装sshpass

    1. 下载安装包  https://sourceforge.net/projects/sshpass/files/sshpass/1.06/sshpass-1.06.tar.gz/download

    2. 解压

         tar xvzf sshpass-1.05.tar.gz

     3. 编译安装

        ./configure

        make

        sudo make install

     4. 编写脚本:       

 #!/bin/bash

sshpass -p '密码' ssh -fNg -L 3307:remote-ip:3306 root@跳板机ip

       运行此脚本就ok了(其实如果把ssh key放到跳板机是可以不用安装sshpass的  哈哈哈)

    5. 终极大招:

#!/bin/bash
while true
do
ps -ef | grep "3307:" | grep -v "grep"
if [ "$?" -eq 1 ]
then
sshpass -p '密码' ssh -fNg -L 3307:remote-ip:3306 root@跳板机ip
echo "process has been restarted!"
else
echo "process already started!"
fi
sleep 10
done

        运行命令挂起:   nohup sh test.sh > ./sh.log 2>&1 &

参考:https://blog.csdn.net/yilukuangpao/article/details/79225295

注:此方案不仅仅可以链接跳板机和通过跳板机链接其他服务器的mysql,也可以是oracle等等,终极思想就是端口映射到本地

你可能感兴趣的:(技术,工具,mysql,mysql,数据库)