使用技巧:如何可视化访问云服务器上的数据库

111 阅读1分钟

背景

我们往往在云服务创建的数据库,如mysql,redis一般都是给内部私有网络访问的,有时候我们想查看数据或者调整数据的时候,可能会通过ssh连接上服务器后敲命令,或者公网开放数据库端口访问,通过电脑软件可视乎操作,最后关闭端口访问权限。这些方式操作起来都很麻烦,我们可以通过ssh的端口转发解决。

ssh端口转发

通过cmd命令执行,确定验证输入ssh密码即可

# 访问本地3306等于ssh连接上服务器后访问localhost服务器上的3306端口
ssh -L 3306:localhost:3306 root@192.168.1.101

在执行cmd命令查看端口,你会发现本地有3306端口

#查询3306端口应用信息
netstat -ano | findstr 3306

这时候你连接本地的3306,就是连接云服务器上的数据库了

123.png

嫌频繁输入密码,我们可以java程序去执行,maven引用jcraft

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

Java代码

//ssh服务器ip
String sshHost = "192.168.1.101";
//ssh服务器用户名
String sshUsername = "root";
//ssh服务器密码
String sshPassword = "12345678";
//ssh服务器端口
int sshPort = 22;
//本地端口
int localPort = 3306;
//远程服务器ip
String remoteHost = "127.0.0.1";
//远程服务器端口
int remotePort = 3306; // Example: MySQL default port

try {
    JSch jsch = new JSch();
    Session session = jsch.getSession(sshUsername, sshHost, sshPort);
    session.setPassword(sshPassword);
    session.setConfig("StrictHostKeyChecking", "no");
    session.connect();

    int assignedPort = session.setPortForwardingL(localPort, remoteHost, remotePort);

    System.out.println("SSH Tunnel established with success!");
    System.out.println("Local Port: " + assignedPort + " forwarded to " + remoteHost + ":" + remotePort);
    //等待输入结束
    Scanner scanner = new Scanner(System.in);
    scanner.nextLine();
    session.disconnect();
} catch (JSchException e) {
    e.printStackTrace();
}