mysqlworkbench与ssh通过密钥连服务器
mysql workbench:
用命令ssh,打开一个端口:
ssh -p ssh目标端口 -i ~/秘钥文件 ssh用户名@ssh目标主机 -L 0.0.0.0:本地端口号:堡垒机IP:堡垒机端口
例:
ssh -p 30012 -i ~/aliyun_rsa user@139.14.14.16 -L 0.0.0.0:10010:192.168.0.101:3306
然后连数据库,用java连本地的10010端口即可。
而如果是通过ssh的用户名密码方式连堡垒机,再连数据库,可以用jsch连接:
pom.xml
<dependency> <groupId>com.jcraft</groupId> <artifactId>jsch</artifactId> <version>0.1.55</version> </dependency>
配置文件:
#本地端口(就是本地访问这个端口,会被转发到所配置的数据库服务器) lport=10010 #SSH服务器ip host=xx.xx.xx.xx #SSH访问端口 port=xxxx #SSH连接用户名 user=root #SSH连接密码 password=xxxx # 远程数据库服务器(是数据库的! 注意数据库的账号密码不需要在这里指定,在jdbc里指定或springboot里配置) rhost=localhost #远程数据库服务端口 rport=3306
main入口函数:
public static void main(String args[]) throws Exception { SSHService.sshRun(); System.out.println(new Gson().toJson(selectLastInfo())); }其中selectLastInfo就是正常的数据库访问service方法。
SSHService类:
package net.highersoft.jdbcssh; import com.jcraft.jsch.JSch; import com.jcraft.jsch.Session; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.Properties; /** * SSH端口转发 */ public class SSHService { static Integer lport;//本地端口 static String rhost;//远程数据库服务器 static int rport;//远程数据库服务端口 static String user;//SSH连接用户名 static String password;//SSH连接密码 static String pem_file_path;//SSH连接密码 static String host;//SSH服务器 static int port;//SSH访问端口 static { //读取配置文件 try { // 获取SSH.properties文件的路径 InputStream is = SSHService.class.getClassLoader().getResourceAsStream("SSH.properties"); Properties prop = new Properties(); prop.load(is); // 读取配置文件的值 lport = Integer.valueOf(prop.getProperty("lport")); rhost = prop.getProperty("rhost"); rport = Integer.valueOf(prop.getProperty("rport")); user = prop.getProperty("user"); password = prop.getProperty("password"); pem_file_path = prop.getProperty("pem_file_path"); host = prop.getProperty("host"); port = Integer.valueOf(prop.getProperty("port")); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public static void sshRun() { JSch jsch = new JSch(); Session session = null; try { if (pem_file_path != null) { jsch.addIdentity(pem_file_path); } session = jsch.getSession(user, host, port); if (pem_file_path == null) { session.setPassword(password); } session.setConfig("StrictHostKeyChecking", "no"); // step1:建立ssh连接 session.connect(); System.out.println(session.getServerVersion());//这里打印SSH服务器版本信息 //step2: 设置SSH本地端口转发,本地转发到远程 int assinged_port = session.setPortForwardingL(lport, rhost, rport); System.out.println("localhost:" + assinged_port + " -> " + rhost + ":" + rport); } catch (Exception e) { if (null != session) { //关闭ssh连接 session.disconnect(); } e.printStackTrace(); } } public static void main(String[] args) { sshRun(); } }
相关阅读
评论:
↓ 广告开始-头部带绿为生活 ↓
↑ 广告结束-尾部支持多点击 ↑