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等等,终极思想就是端口映射到本地