通过远程连接,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超级管理员修改了一下 想要 ...
随机推荐
- DeepSeek本地安装部署(指南)
前言 这两天deepseek出圈了. 今天分享一下,如果在本地电脑部署和运行deepseek,实现AI对话的功能. 访问ollama官网: https://ollama.com/ 下载一个合适自己操作 ...
- IDEA中使用Yapi上传接口
一.Idea下载插件YapiUpload 二.修改该项目的隐藏文件夹idea .idea文件下修改misc.xml增加如下配置 <component name="yapi" ...
- Luogu P4310 绝世好题 题解 [ 绿 ] [ 线性 dp ] [ 单调队列优化 ] [ 二进制优化 ]
题目:绝世好题. 暴力 dp 显然 \(O(n^2)\) 转移即可. 单调队列优化 观察到只有某二进制位两个数都为 \(1\) 时才能转移,因此我们把每个二进制位开一个单调队列,然后对于一个数 \(a ...
- 最新demo版 | 如何0-1开发支付宝小程序之小程序页面功能介绍(三)
前两期讲了小程序开发的准备工作以及前期需要如何调试,今天我们就来介绍下开发一个支付宝小程序页面需要了解哪些信息. 一个小程序页面的整体功能的构成离不开页面展示(AXML).页面样式(ACSS)以及页面 ...
- 超详细,DeepSeep 接入PyCharm实现AI编程!(支持本地部署DeepSeek及官方DeepSeek接入),建议收藏!
在当今数字化时代,AI编程助手已成为提升开发效率的利器.DeepSeek作为一款强大的AI模型,凭借其出色的性能和开源免费的优势,成为许多开发者的首选.今天,就让我们一起探索如何将DeepSeek接入 ...
- Python 合并 Excel 单元格
合并 Excel 单元格是 Excel 数据处理和表格设计中的一项常用操作.例如,在制作表格标题时,经常会将多个单元格合并,使标题能够跨列显示,更加醒目和美观.此外,当对数据进行分类时,为了使同一类别 ...
- Paxos算法:如何解决分布式系统中的共识问题?
背景 Paxos 算法是 Leslie Lamport(莱斯利·兰伯特)在 1990 年提出了一种分布式系统 共识 算法.这也是第一个被证明完备的共识算法(前提是不存在拜占庭将军问题,也就是没有恶意节 ...
- ATT&CK实战系列(一)
环境下载 下载靶场环境,并导入虚拟机分别是win2003.win7.winserver2008 配置网络 虚拟机--编辑--虚拟机网络编辑器--添加网络VMnet2--仅主机模式分配的地址是192.1 ...
- 在Linux系统下启动eclipse时遇到Eclipse 无法正常启动
Eclipse: 无法打开显示: 出现此问题原因: 这通常表示 Eclipse 试图在没有合适显示环境的情况下启动,可能是在没有图形界面的环境(例如远程服务器或没有正确配置的 X11 转发)中运行. ...
- 阻尼、模态应变能法与FRP的关系
阻尼的概念 系统损耗振动能或声能的能力称为阻尼 阻尼越大,输人系统的能量便能在较短时间内损耗完毕.系统从受激振动到重新静止所经历的时间就越短; 阻尼也可理解为系统受激后迅速恢复到受激前状态的一种能力 ...