为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

Java通过跳板机远程连接数据库

2023-06-21 5页 doc 92KB 5阅读

用户头像 个人认证

is_856463

暂无简介

举报
Java通过跳板机远程连接数据库     Java通过跳板机远程连接数据库          以下列举了程序使用ssh到跳板机,通过跳板机连接mysql数据库的过程。首先是maven依赖com.jcraftjsch0.1.53看了下基本都是用这个包,但是这里有一个问题,就是现在通过ssh-keygen生成的私钥,都是无法通过这个jar包使用的。此时需要将本地的私钥换成经典的加密方式。打开本地的id_rsa文件,如头部为以下文本,则需要执行命令 ssh-keygen-p-fid_rsa-mpem-P""-N""(id_rsa为id_rsa文件的路径)-----...
Java通过跳板机远程连接数据库
     Java通过跳板机远程连接数据库          以下列举了程序使用ssh到跳板机,通过跳板机连接mysql数据库的过程。首先是maven依赖com.jcraftjsch0.1.53看了下基本都是用这个包,但是这里有一个问题,就是现在通过ssh-keygen生成的私钥,都是无法通过这个jar包使用的。此时需要将本地的私钥换成经典的加密方式。打开本地的id_rsa文件,如头部为以下文本,则需要执行命令 ssh-keygen-p-fid_rsa-mpem-P""-N""(id_rsa为id_rsa文件的路径)-----BEGINOPENSSHPRIVATEKEY-----执行完后,id_rsa文件的第一行为-----BEGINRSAPRIVATEKEY-----然后是程序,不细说了,该封装的已经封装好,有不明白的可以留言。@Slf4j@WebListener@ComponentpublicclassMyContextListenerimplementsServletContextListener{@AutowiredprivateSSHDataBaseConfigdataBaseConfig;/***监听Servlet初始化事件*/@OverridepublicvoidcontextInitialized(ServletContextEventarg0){//建立连接try{dataBaseConfig.createSSH();}catch(Throwablee){e.printStackTrace();//errorconnectingSSHserver}}/***监听Servlet终止事件*/@OverridepublicvoidcontextDestroyed(ServletContextEventarg0){//断开连接try{dataBaseConfig.closeSSH();//disconnect}catch(Exceptione){e.printStackTrace();}}}@Component@EnableConfigurationProperties(SSHProperties.class)@Slf4jpublicclassSSHDataBaseConfigimplementsServletContextListener{@AutowiredprivateSSHPropertiessshConfig;//representseachsshsessionprivateSessionsession;publicvoidcreateSSH(){if(sshConfig==null||sshConfig.getEnabled==null||!sshConfig.getEnabled()){return;}try{log.info("sshforwardisopend.");log.info("sshinit……");JSchsch=newJSch();if(null!=sshConfig.getSshKnownHosts()&&!"".equals(sshConfig.getSshKnownHosts())){sch.setKnownHosts(sshConfig.getSshKnownHosts());}if(null!=sshConfig.getSshKeyPath()&&!"".equals(sshConfig.getSshKeyPath())){sch.addIdentity(sshConfig.getSshKeyPath());}session=sch.getSession(sshConfig.getUsername(),sshConfig.getHost(),sshConfig.getPort());session.setConfig("StrictHostKeyChecking","no");if(null!=sshConfig.getPassword()&&!"".equals(sshConfig.getPassword())){session.setPassword(sshConfig.getPassword());}session.connect();session.setPortForwardingL(sshConfig.getFromHost(),sshConfig.getFromPort(),sshConfig.getToHost(),sshConfig.getToPort());log.info("sshinitsucessful……");}catch(JSchExceptione){log.error("sshJSchExceptionfailed.",e);}catch(Exceptione){log.error("sshsettingsisfailed.skip!",e);}}/***关闭SSH连接*/publicvoidcloseSSH(){if(sshConfig==null||sshConfig.getEnabled==null||!sshConfig.getEnabled()){return;}session.disconnect();}}@ConfigurationProperties(prefix="spring.datasource.ssh.forward")@DatapublicclassSSHProperties{privateBooleanenabled;privateStringsshKeyPath;privateStringsshKnownHosts;privateStringhost;privateIntegerport=-1;privateStringusername;privateStringpassword;privateStringfromHost;privateIntegerfromPort=-1;privateStringtoHost;privateIntegertoPort=-1;}spring:datasource:ssh:forward:enabled:truessh-key-path:~/.ssh/id_rsassh-known-hosts:host:跳板机IPport:跳板机SSH端口username:跳板机SSH用户名password:跳板机SSH密码(没有不填)from-host:127.0.0.1(就填本地就行,mysql连接那里就写这个)from-port:3307(随便写,不冲突就行,mysql连接那里就写这个)to-host:mysql服务器真实IPto-port:mysql服务器真实端口druid:datasource:master:url:jdbc:mysql://127.0.0.1:3307/xxxx?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghaiusername:xxxpassword:xxxdriver-class-name:com.mysql.cj.jdbc.Driver-------------------20211230-------------------------ssh是有命令做到这种遂道的,如下ssh-froot@{host} -p22-L{from-port}:{from-host}:{to-port}-N以上示例,假设mysql服务器在云上一台没开外网的服务器上,假设这台服务器IP为10.0.0.0,数据库端口3306假设现在有一台跳板机开了ssh权限,假设该服务器IP为20.0.0.0,ssh端口为22需要连接数据库的这台服务器,只有跳板机的ssh权限,假设这台服务器为30.0.0.0,此时应如何在这台机器连接数据库?在30.0.0.0这台服务器执行命令ssh-froot@20.0.0.0-p22-L9999:127.0.0.1:3306此时30.0.0.0这台服务器,可以使用127.0.0.1:9999这个连接访问数据库。参考链接springboot使用SSH通过A服务器跳板机连接B服务器Mysql(安全策略)_李虹柏的博客-博客_springbootssh连接服务器java-"Invalidprivatekey"whenusingJSch-StackOverflow -全文完-
/
本文档为【Java通过跳板机远程连接数据库】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索