Spring Boot 通过SSH 远程连接 Mongo DB

文章介绍了如何在SpringBoot项目中通过POM文件添加JSCH依赖,配置YAML以安全地连接远程MongoDB数据库,同时使用SSH进行端口转发。还展示了如何在代码中管理SSH连接和断开操作,以及在Spring上下文初始化和销毁时处理连接的生命周期。
摘要由CSDN通过智能技术生成

在 pom 文件中加入相关依赖

        <dependency>
            <groupId>com.jcraft</groupId>
            <artifactId>jsch</artifactId>
            <version>0.1.46</version>
        </dependency>

yml 配置,注意端口不要占用已经使用的端口,这个端口只是做转发使用

spring:
  data:
    mongodb:
      uri: mongodb://username:password@127.0.0.1:27019/exam?authSource=admin
 
mongo:
  ssh:
    host: 服务器地址
    user: 登录账号
    password: 密码
    port: 22
    local-port: 27019(与上面那个配置一样的)
    remote-host: mongo 所在的ip地址
    remote-port: 27017

代码配置

配置文件类

 
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.context.annotation.Configuration;
 
@Configuration
// 因为只是想本地连接线上的mongo,所以加了这个配置,不需要可以删除
@ConditionalOnProperty(name = "spring.profiles.active", havingValue = "dev")
@Data
public class SSHMongoConfig {
 
    @Value("${mongo.ssh.host}")
    private String host;
 
    @Value("${mongo.ssh.user}")
    private String sshUser;
 
    @Value("${mongo.ssh.password}")
    private String sshPwd;
 
    @Value("${mongo.ssh.port}")
    private int sshPort;
 
    @Value("${mongo.ssh.remote-host}")
    private String remoteHost;
 
    @Value("${mongo.ssh.local-port}")
    private int localPort;
 
    @Value("${mongo.ssh.remote-port}")
    private int remotePort;
}

创建 Mongo session

 
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
 
/**
 * @author NZL
 * @version 1.0
 * @date 2019/12/11 9:47
 */
public class SSHMongoConnection {
    Session session = null;
    /**
     *    建立SSH连接
     */
    public SSHMongoConnection(String sshUser, String sshPwd, int sshPort, String host, int localPort, int remotePort, String remoteHost) {
        try {
            JSch jsch = new JSch();
            session = jsch.getSession(sshUser, host, sshPort);
            session.setPassword(sshPwd);
            session.setConfig("StrictHostKeyChecking", "no");
            session.connect();
            session.setPortForwardingL(localPort, remoteHost, remotePort);
        } catch (Exception e) {
            // do something
        }
    }
    /**
     *    断开SSH连接
     */
    public void closeSSH () {
        this.session.disconnect();
    }
}

建立连接

import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.spring.SpringUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
 
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
 
 
@WebListener
@Component
@Slf4j
public class SSHMongoContextListener implements ServletContextListener {
    private SSHMongoConnection conexionssh;
    public SSHMongoContextListener() {
        super();
    }
    /**
     * @see ServletContextListener#contextInitialized(ServletContextEvent)
     */
    @Override
    public void contextInitialized(ServletContextEvent arg0) {
        // 建立连接
        if(StrUtil.equals(SpringUtil.getActiveProfile(), "prod")) {
            log.info("prod 不加载 Mongo SSH 配置");
            return ;
        }
        log.info(SpringUtil.getActiveProfile() + " 开始加载 Mongo SSH 配置");
        try {
            SSHMongoConfig mongoConfig = SpringUtil.getBean(SSHMongoConfig.class);
            conexionssh = new SSHMongoConnection(mongoConfig.getSshUser(), mongoConfig.getSshPwd(), mongoConfig.getSshPort(),
                    mongoConfig.getHost(), mongoConfig.getLocalPort(), mongoConfig.getRemotePort(),  mongoConfig.getRemoteHost());
            log.info("成功建立 Mongo SSH 连接!");
        } catch (Throwable e) {
            log.info("Mongo SSH连接失败!");
            e.printStackTrace();
        }
    }
    /**
     * @see ServletContextListener#contextDestroyed(ServletContextEvent)
     */
    @Override
    public void contextDestroyed(ServletContextEvent arg0) {
        // 断开连接
        log.info("Context destroyed ... !");
        try {
            conexionssh.closeSSH();
            log.info("成功断开 Mongo SSH 连接!");
        } catch (Exception e) {
            e.printStackTrace();
            log.info("断开 Mongo SSH 连接出错!");
        }
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、安装和启动 MongoDB 在远程机器上安装和启动 MongoDB,具体安装和启动过程可以参考 MongoDB 的官方文档。 2、开启 SSH 服务 在远程机器上开启 SSH 服务,并配置好 SSH 的端口,用户名和密码等信息。 3、从本地机器连接到远程机器 在本地机器上使用 ssh 命令连接到远程机器的 SSH 服务,例如: ``` ssh username@remote_ip_address -p ssh_port ``` 其中,`username` 为远程机器的用户名,`remote_ip_address` 为远程机器的 IP 地址,`ssh_port` 为远程机器的 SSH 端口号。 4、从远程机器连接到 MongoDB 在远程机器上使用命令行工具或 MongoDB 的客户端程序连接到 MongoDB,例如: ``` mongo --host mongodb_ip_address --port mongodb_port --username mongodb_username --password mongodb_password --authenticationDatabase mongodb_authentication_database ``` 其中,`mongodb_ip_address` 是 MongoDB 服务器的 IP 地址,`mongodb_port` 是 MongoDB 服务器监听的端口号,`mongodb_username` 和 `mongodb_password` 是 MongoDB 的连接用户名和密码,`mongodb_authentication_database` 是 MongoDB 的认证数据库名称。 5、连接 MongoDB 可视化工具 在本地机器上使用 MongoDB 的可视化工具连接到远程机器的 MongoDB,例如使用 Robo 3T 或者 MongoDB Compass 等工具。在连接时,需要设置 MongoDB 服务器的 IP 地址,端口号,用户名和密码等信息。 以上五步就是通过 SSH 远程连接 MongoDB 的基本步骤,按照这些步骤操作,就可以在本地机器上连接到远程机器上的 MongoDB 服务器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值