通过远程连接,docker访问获取数据表信息
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.55</version>
</dependency>
private static final String HOST = "xxx.xx.xx.xx";
private static final String USERNAME = "xxx";
private static final String PASSWORD = "xxxxxxxxxx";
private static final String DOCKERCOMMAND =
"sudo -S docker exec hrm_database /bin/bash -c \"" +
"echo '--- START: tbl_asset_port ---'; " +
"mysql -uhrm -pP@ssw0rd2022 hrm -e 'SELECT * FROM tbl_asset_port;'; " +
"echo '--- END: tbl_asset_port ---'; " +
"echo '--- START: tbl_asset_host ---'; " +
"mysql -uhrm -pP@ssw0rd2022 hrm -e 'SELECT * FROM tbl_asset_host;'; " +
"echo '--- END: tbl_asset_host ---'; " +
"echo '--- START: tbl_client ---'; " +
"mysql -uhrm -pP@ssw0rd2022 hrm -e 'SELECT * FROM tbl_client;'; " +
"echo '--- END: tbl_client ---'\"";
private static final Integer PORT = xxx;
/**
* 获取数据
*/
public static void getData(String host, String username, String password, String dockerCommand, Integer port, String filePath) {
try {
// 创建 JSch 实例并连接到 SSH
JSch jsch = new JSch();
Session session = jsch.getSession(username, host, port);
session.setPassword(password);
// 设置 SSH 的一些配置,避免首次连接时询问是否接受 host key
session.setConfig("StrictHostKeyChecking", "no");
session.connect();
//执行
ChannelExec sudoChannel = (ChannelExec) session.openChannel("exec");
sudoChannel.setCommand("echo \"" + password + "\" | " + dockerCommand);
sudoChannel.setInputStream(new ByteArrayInputStream(password.getBytes()));
//放到文件里
FileOutputStream fileOutputStream = new FileOutputStream(filePath);
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream);
BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter);
sudoChannel.setOutputStream(fileOutputStream);
//连接
sudoChannel.connect();
InputStream errorStream = sudoChannel.getErrStream();
BufferedReader errorReader = new BufferedReader(new InputStreamReader(errorStream));
String line;
while ((line = errorReader.readLine()) != null) {
System.err.println("Error: " + line); // 打印错误信息
}
// 等待 sudo 命令执行完成
// 超时机制:比如 30 秒超时
int timeout = 5000; // 超过 30 秒就结束
long startTime = System.currentTimeMillis();
while (!sudoChannel.isClosed()) {
// 如果超过超时限制,跳出循环
if (System.currentTimeMillis() - startTime > timeout) {
break;
}
Thread.sleep(500); // 每 0.5 秒检查一次
}
//关闭连接
bufferedWriter.close();
outputStreamWriter.close();
sudoChannel.disconnect();
session.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
通过远程连接,docker访问获取数据表信息的更多相关文章
- 使用docker inspect获取数据卷信息时返回地址为空
使用 docker inspect 命令查看容器挂载的volume的目录 $ sudo docker inspect --format "{{.Volumes}}" redis-m ...
- 用delphiXE7 dbExpress Framework提供的功能获取数据表信息
uses + Data.DBXMetaDataNames procedure TMainForm.Button2Click(Sender: TObject);var Cmd: TDBXComman ...
- T-SQL - 访问远程数据库并对其数据表进行操作
一.概述 很多时候我们需要在.NET应用程序中使用一条SQL语句来访问来自不同服务器.不同数据库中的不同的表,实现方法有很多.我们可以在.NET应用程序中建立数据访问层,使用ADO.NET Entit ...
- 以对象的方式来访问xml数据表(三)
怎样以对象的方式来访问xml数据表? 在讲如何具体实现(二)中所说的专门用于访问xml文件的动态链接库之前,我们先来看看这个动态链接库具体要实现什么功能. 动态链接库IXmlDB.dll的功能: 1. ...
- 以对象的方式来访问xml数据表(二)
为什么要以对象的方式来访问xml数据表? 还记得,自己是在一次完成师兄布置的任务时接触到了xml,那时候需要用xml来作为数据文件,保存一个简单的图书管理系统的数据.于是就知道了,可以用xml文件来保 ...
- 以对象的方式来访问xml数据表(一)
所有实例代码都是以C#演示—— 在将如何以对象的方式来访问xml数据表之前,我们先来谈谈如何用xml文件作为数据库吧! 平时在开发一些小的应用的时候,需要一个数据库,这个时候虽然可以用SQL serv ...
- python3.4连接和读取oracle数据表
想用python连接Oracle并查询数据表,就写了个Demo.参考了以下网址. Python学习之 cx_Oracle学习记录 一 http://my.oschina.net/bxxfighting ...
- ssh远程连接docker中的 linux container
ssh远程连接docker中的container 由于工作需要,要远程连接Container,本地机器是windows,以下为解决步骤: 1. 环境 本地:Windows ↓ Docker版本1. ...
- TLS加密远程连接Docker
<Docker远程连接设置>一文讲述了开启Docker远程连接的方法,但那种方法不安全,因为任何客户端都可以通过Docker服务的IP地址连接上去,今天我们就来学习Docker官方推荐的安 ...
- window7 远程连接 拒绝访问
windows7 远程连接 拒绝访问 ----------------------------- 找了很多网络文章,都没有解决问题. 然后突然: 用Administrator超级管理员修改了一下 想要 ...
随机推荐
- Salt key 系统的接口
官方文档:https://docs.saltstack.com/en/3000/ref/wheel/all/salt.wheel.key.html Wheel 系统包装了Salt key 系统,以编程 ...
- Flink - [06] 状态管理
题记部分 一.Flink中的状态 由一个任务维护,并且用来计算某个结果的所有数据,都属于这个任务的状态. 可以认为状态就是一个本地变量,可以被任务的业务逻辑访问. Flink会进行状态管理,包括状态一 ...
- Ansible - [03] Ansible ad-hoc模式
Ansible ad-hoc是一种通过命令行批量管理的方式 格式:ansible 主机集合 -m 模块名 -a "参数" 其他参数: -k 使用密码远程.-i 指定主机列表文件 以 ...
- 【Ryan】: linux下挂在共享文件夹
点击查看代码 $ vmware-hgfsclient $ sudo vmhgfs-fuse .host:/ /mnt -o allow_other
- idea社区版配置springboot项目问题分析及处理
前言 记录一次使用IDEA社区版配置SpringBoot项目的经历,包括遇到的问题及解决过程 IDEA版本:IntelliJ IDEA 2024.2.3 (Community Edition) 问题描 ...
- Anaconda使用记录
1 安装 windows下,安装完添加环境变量(哦安装时勾选添加环境变量选项就是加这些变量的) ## (记anaconda软件目录为%ANACONDA3%) %ANACONDA3%\ %ANACOND ...
- FastAPI 自定义参数验证器完全指南:从基础到高级实战
title: FastAPI 自定义参数验证器完全指南:从基础到高级实战 date: 2025/3/11 updated: 2025/3/11 author: cmdragon excerpt: 本教 ...
- Pwnable_orw
题源 题解 保护 只开启了栈保护 分析 进入ida分析 main函数如下 seccomp (Secure Computing Mode)是一种 Linux 内核安全机制,它可以 限制进程可执行的系统调 ...
- c++中的类成员函数指针
c++中的类成员函数指针 文章目录 c++中的类成员函数指针 发生的事情 正常的函数指针定义 定义类的成员函数指针 std::function 发生的事情 最近,想用一个QMap来创建字符串和一个函数 ...
- ubuntu install 下载安装包报错 subprocess installed post-installation script returned error exit status 10
前言 在 ubuntu 环境下使用 sudo apt-get install 安装软件包时,会报错 XXX 为安装软件包 dpkg:error processing package XXX (--co ...