最近公司里面的php小伙伴开始迁移数据库,从之前在服务器上搭建的Mysql服务器,到现在的搬迁到阿里云的服务器。
所遇到的坑。昨天刚解决,今天过来填坑
Gradle依赖1
2
3compile group: 'com.jcraft', name: 'jsch', version: '0.1.55'
compile group: 'org.bouncycastle', name: 'bcprov-jdk16', version: '1.46'
bcprov是加密使用的库。
jsch是ssh的Java实现的库。
原理
通过自己的服务器作为跳板机来链接阿里云的Mysql服务器,就得先把服务器映射成为本地(类似于VPN)。就可以通过流量的转发到达目的的服务器。
Java 代码的实现
1 |
|
遇到的坑
- 开启root账号登录
修改/etc/ssh/sshd_config文件,开启root账号登录。PermitRootLogin yes 把这一行通过注释去掉,开启root远程登录 - 登录鉴权失败
com.jcraft.jsch.JSchException: Auth fail
先确认是使用密码登录还是使用私钥登录,若为密码登录则验证密码是否正确,若使用秘钥登录则验证更换秘钥进行尝试。 - openSSL 版本过高
com.jcraft.jsch.JSchException: invalid privatekey: [B@568db2f2
直接使用编辑器查看秘钥已确定是不是这个原因
若为—–BEGIN OPENSSH PRIVATE KEY—–开头,以—–END OPENSSH PRIVATE KEY—–结尾。那就是jsch无法解析高版本openssl生成的秘钥。
若为—–BEGIN RSA PRIVATE KEY—–开头,以—–END RSA PRIVATE KEY—–结尾,则排除此错误。
解决办法为:- 更换低版本的秘钥
- 将私钥转为格式https://github.com/duplicati/duplicati/issues/3360