<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访问获取数据表信息的更多相关文章

  1. 使用docker inspect获取数据卷信息时返回地址为空

    使用 docker inspect 命令查看容器挂载的volume的目录 $ sudo docker inspect --format "{{.Volumes}}" redis-m ...

  2. 用delphiXE7 dbExpress Framework提供的功能获取数据表信息

    uses +  Data.DBXMetaDataNames procedure TMainForm.Button2Click(Sender: TObject);var  Cmd: TDBXComman ...

  3. T-SQL - 访问远程数据库并对其数据表进行操作

    一.概述 很多时候我们需要在.NET应用程序中使用一条SQL语句来访问来自不同服务器.不同数据库中的不同的表,实现方法有很多.我们可以在.NET应用程序中建立数据访问层,使用ADO.NET Entit ...

  4. 以对象的方式来访问xml数据表(三)

    怎样以对象的方式来访问xml数据表? 在讲如何具体实现(二)中所说的专门用于访问xml文件的动态链接库之前,我们先来看看这个动态链接库具体要实现什么功能. 动态链接库IXmlDB.dll的功能: 1. ...

  5. 以对象的方式来访问xml数据表(二)

    为什么要以对象的方式来访问xml数据表? 还记得,自己是在一次完成师兄布置的任务时接触到了xml,那时候需要用xml来作为数据文件,保存一个简单的图书管理系统的数据.于是就知道了,可以用xml文件来保 ...

  6. 以对象的方式来访问xml数据表(一)

    所有实例代码都是以C#演示—— 在将如何以对象的方式来访问xml数据表之前,我们先来谈谈如何用xml文件作为数据库吧! 平时在开发一些小的应用的时候,需要一个数据库,这个时候虽然可以用SQL serv ...

  7. python3.4连接和读取oracle数据表

    想用python连接Oracle并查询数据表,就写了个Demo.参考了以下网址. Python学习之 cx_Oracle学习记录 一 http://my.oschina.net/bxxfighting ...

  8. ssh远程连接docker中的 linux container

    ssh远程连接docker中的container   由于工作需要,要远程连接Container,本地机器是windows,以下为解决步骤: 1. 环境 本地:Windows ↓ Docker版本1. ...

  9. TLS加密远程连接Docker

    <Docker远程连接设置>一文讲述了开启Docker远程连接的方法,但那种方法不安全,因为任何客户端都可以通过Docker服务的IP地址连接上去,今天我们就来学习Docker官方推荐的安 ...

  10. window7 远程连接 拒绝访问

    windows7 远程连接 拒绝访问 ----------------------------- 找了很多网络文章,都没有解决问题. 然后突然: 用Administrator超级管理员修改了一下 想要 ...

随机推荐

  1. AI 如何重塑劳动力市场:基于 Claude 数据的深度分析

    前言 本文翻译自 Anthropic 今天发布的 The Anthropic Economic Index ,经济指数报告,这份报告基于 Claude 的数据对目前的 AI 使用情况做了汇总. 引言 ...

  2. Maven入门,读完这篇就够了

    Maven 项⽬⽣命周期 Maven从项⽬的三个不同的⻆度,定义了三套⽣命周期,三套⽣命周期是相互独⽴的,它们之间不会相互影响. 清理⽣命周期(Clean Lifecycle):该⽣命周期负责清理项⽬ ...

  3. 深入集成:使用 DeepSeek SDK for .NET 实现自然语言处理功能

    快速上手:DeepSeek SDK for .NET 全面指南 简介 Ater.DeepSeek.AspNetCore 是专门为 .NET 开发者提供的 DeepSeek API SDK.它旨在简化与 ...

  4. 开源一款数据转换扩展板-FreakStudio多米诺系列

    原文链接: FreakStudio的博客 摘要 数据转换板通过I2C接口进行信号采集和输出,支持最多16通道输入和2通道输出.具备860Hz采样率和50KHz输出频率,采用16位ADC和12位DAC芯 ...

  5. JAVA实现AES加密、解密

    一.什么是AES? 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),是一种区块加密标准.这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用. ...

  6. 【Abaqus Case】2D弹塑性接触分析

    2D 弹塑性-接触分析 本案例属于材料非线性+边界条件非线性 问题描述 前处理 材料 *Material, name=steel *Density 7.8e-09, *Elastic 210000., ...

  7. Dockerfile 语法与常用命令

    转发请注明出处: 一.Dockerfile 核心语法规则 指令大写:所有指令必须大写(如 FROM, RUN) 顺序执行:指令按顺序从上到下执行 分层构建:每条指令生成一个镜像层,修改上层不会影响下层 ...

  8. Delphi 多线程使用

    1. 定义线程类 type TMyThread = class(TThread) private { Private declarations } fPos:Integer; // 变量 protec ...

  9. vue实现不同用户权限的方法

    Vue 实现不同用户权限的方法 在项目中,实现不同用户的权限控制是常见的需求也是常见的功能模块,例如管理系统中不同角色(管理员.普通用户等)应有不同的访问权限,小程序.App等在不同角色登入的时候显示 ...

  10. MySQL性能调优必知:Performance Schema引擎的配置与使用

    当你在MySQL高并发情况下的进行性能调优时,需要知道调整后的影响.例如查询是否变快了?锁是否会减慢运行速度?内存使用情况如何?磁盘IO等待时间变了吗? . Performance Schema就有一 ...