当前位置: 首页 > news >正文

Java【问题 07】SSH不同版本使用jsch问题处理(7.4升级9.7及欧拉原生8.8)

SSH不同版本使用jsch问题处理

  • 1.问题一
  • 2.问题二
    • 2.1 说明
    • 2.2 解决
  • 3.问题三

1.问题一

# 1.系统
cat /etc/os-release
# 系统信息
NAME="openEuler"
VERSION="22.03 (LTS-SP1)"
ID="openEuler"
VERSION_ID="22.03"
PRETTY_NAME="openEuler 22.03 (LTS-SP1)"
ANSI_COLOR="0;31"# 2.ssh
ssh -V
# ssh信息
OpenSSH_8.8p1, OpenSSL 1.1.1m  14 Dec 2021
# 1.Java报错
com.jcraft.jsch.JSchException: Algorithm negotiation fail# 2.使用 systemctl status sshd 查看状态
Unable to negotiate with xxx.xxx.x.xxx port xxxxx: no matching host key type found. 
Their offer: ssh-rsa,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha>

问题解决:

  • 配置文件sshd_configHostKeyAlgorithms添加算法ssh-rsa
HostKeyAlgorithms ssh-ed25519,ssh-ed25519-cert-v01@openssh.com,rsa-sha2-256,rsa-sha2-512,ssh-rsa

2.问题二

2.1 说明

OpenSSH是从原本的OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017升级到 OpenSSH_9.7p1, OpenSSL 3.2.0 23 Nov 2023,当前环境如下:

# 1.系统
CentOS Linux release 7.8.2003 (Core)# 2.ssh -V
OpenSSH_9.7p1, OpenSSL 3.2.0 23 Nov 2023
# 1.密码错误时Java报错信息
cn.hutool.extra.ssh.JschRuntimeException: JSchException: Auth fail
# 密码修改正确后 systemctl status sshd 查看状态
Accepted password for root from 123.160.246.239 port 22838 ssh2# 2.通过sftp上传文件时
cn.hutool.extra.ssh.JschRuntimeException: JSchException: channel is not opened.
# 过一会儿后 systemctl status sshd 查看状态
error: no more sessions

代码进行调试,发现报错的位置:

// 报错行
channelSftp.put(fs, directory, ChannelSftp.OVERWRITE);
// 报错信息
com.jcraft.jsch.SftpException: No such file

我一度认为是传输模式的问题,在ChannelSftp.put(InputStream src, String dst, int mode)方法中,mode参数用于指定文件传输模式,其可选值有:

  • ChannelSftp.OVERWRITE:这是默认的传输模式,它会完全覆盖目标服务器上的同名文件。如果目标文件不存在,则会创建一个新的文件。
  • ChannelSftp.RESUME:这种模式下,如果传输被中断,那么在下次调用put方法时,会从上一次中断的地方继续传输,而不是重新开始传输整个文件。
  • ChannelSftp.APPEND:此模式允许你将数据追加到目标服务器上的现有文件中,而不是覆盖它。如果目标文件不存在,则会创建一个新的文件。

换用其他模式依然报错。

2.2 解决

最终发现是代码的问题:

// 进行代码调试时发现远程登录耗时较久
SshClient.getInstance().sshRemoteCallLoginByTool(sshHost, sshPort, sshUserName, sshPassword);
// 导致创建目标目录时未执行
SshClient.getInstance().execCommandByTool("mkdir " + targetPath);

execCommandByTool方法的原始代码:

 /*** 执行命令** @param command 命令*/public String execCommandByTool(String command) {boolean isConnected = checkConnectionStatus();if (isConnected) {return JschUtil.exec(session, command, Charsets.UTF_8);}return null;}

可以看出,如果登录较慢,checkConnectionStatus的状态是false则创建目录的命令未被执行,导致上传时的文件路径不存在,出现报错信息,改进如下:

/*** 执行命令** @param command 命令*/
public String execCommandByTool(String command) {boolean isConnected = checkConnectionStatus();while (!isConnected) {isConnected = checkConnectionStatus();}return JschUtil.exec(session, command, Charsets.UTF_8);
}

3.问题三

# 连接超时异常
com.jcraft.jsch.JSchException: Session.connect: java.net.SocketTimeoutException: Read timed out
# 包损坏
com.jcraft.jsch.JSchException: Packet corrupt

异常出现的位置及处理方案:

private boolean createSessionAndConnected() {if (session == null) {log.info("SSHClient createSessionAndConnected...");session = JschUtil.createSession(this.sshHost, this.sshPort, this.sshUser, this.sshPass);Properties config = new Properties();config.put("StrictHostKeyChecking", "no");session.setConfig(config);try {session.connect(8000);// com.jcraft.jsch.JSchException: Session.connect: java.net.SocketTimeoutException: Read timed out// 增加超时时间 session.connect(200000);} catch (JSchException e) {// com.jcraft.jsch.JSchException: Packet corrupt// 使用同一个session对象再次进行连接时会报错// 重新连接时使用新的session对象session = null;e.printStackTrace();log.info("SSHClient createSessionAndConnected printStackTrace");return false;}log.info("SSHClient createSessionAndConnected Success!");}return this.session.isConnected();
}

相关文章:

Java【问题 07】SSH不同版本使用jsch问题处理(7.4升级9.7及欧拉原生8.8)

SSH不同版本使用jsch问题处理 1.问题一2.问题二2.1 说明2.2 解决 3.问题三 1.问题一 # 1.系统 cat /etc/os-release # 系统信息 NAME"openEuler" VERSION"22.03 (LTS-SP1)" ID"openEuler" VERSION_ID"22.03" PRETTY_NAME"openEu…...

k8s和deepflow部署与测试

Ubuntu-22-LTS部署k8s和deepflow 环境详情: Static hostname: k8smaster.example.net Icon name: computer-vm Chassis: vm Machine ID: 22349ac6f9ba406293d0541bcba7c05d Boot ID: 605a74a509724a88940bbbb69cde77f2 Virtualization: vmware Operating System: U…...

matlab使用教程(92)—流线图、流带图和流管图

1.使用向量数据显示流线图 MATLAB 向量数据集 wind 代表北美地区的气流。本示例结合使用了几种方法: 利用流线跟踪风速 利用切片平面显示数据的横截面视图 利用切片平面上的等高线提高切片平面着色的可见性 1.1确定坐标的范围 加载数据并确定用来定位切片平面…...

全网最全!场外个股期权的询价下单流程的详细解析

场外个股期权的询价下单流程 场外个股期权交易,作为在交易所外进行的个性化期权交易方式,为投资者提供了更加灵活和定制化的交易选择。以下是场外个股期权询价下单流程的详细步骤: 文章来源/:财智财经 第一步:明确交…...

linux 如何解压 zip

使用unzip命令解压zip文件: unzip file.zip这将会将file.zip文件解压到当前目录。 使用tar命令解压zip文件: tar -xf file.zip这将会将file.zip文件解压到当前目录。 使用7z命令解压zip文件: 7z x file.zip这将会将file.zip文件解压到当…...

【ubuntu】增加samba服务和文件夹

发现ai -server的ubuntu机器无法git clone 下来github的文件所以 使用samba 连接到linux的文件夹proj然后在我的windows上git clone 即可。安装samba Creating config file /etc/samba/smb.conf with new version Setting up libcephfs2 (17.2.7-0ubuntu0.22.04.1) ... Setting…...

vue3中作用域插槽

1、先说一下具名插槽 有时在一个组件中包含多个插槽出口是很有用的。举例来说&#xff0c;在一个 组件中&#xff0c;有如下模板&#xff1a; <div class"container"><header><!-- 标题内容放这里 --></header><main><!-- 主要内容…...

Vuforia AR篇(六)— Mid Air 半空识别

目录 前言一、什么是Mid Air&#xff1f;二、使用步骤三、示例代码四、效果 前言 增强现实&#xff08;AR&#xff09;技术正在改变我们与数字世界的互动方式。Vuforia作为先进的AR开发平台&#xff0c;提供了多种工具来创造引人入胜的AR体验。其中&#xff0c;Mid Air功能以其…...

统计信号处理-匹配滤波器实现与验证(matlab仿真)

什么是匹配滤波器 匹配滤波器是一种信号处理技术&#xff0c;它用于从噪声中提取信号&#xff0c;特别是在信号与噪声比率较低的情况下。匹配滤波器之所以存在&#xff0c;是因为它在信号检测和估计方面具有几个关键的优势&#xff1a; 最大化信噪比&#xff1a;匹配滤波器设计…...

四川汇聚荣聚荣科技有限公司综合实力如何?

在探讨一个公司的综合实力时&#xff0c;我们不仅关注其经济表现&#xff0c;还应深入分析其技术实力、市场地位、创新能力、团队素质以及社会责任感等多个维度。四川汇聚荣聚荣科技有限公司作为一家立足于科技领域的企业&#xff0c;其实力究竟如何呢?接下来的内容将围绕这一…...

【Power Compiler手册】7.功耗分析

概述 `report_power` 命令分析并报告设计中各种元素的功耗。在执行此命令之前,必须捕获开关活动,将设计映射到门级,并标注设计。 该工具为以下设计元素创建功耗报告: - 设计 - 模块 - 网络 - 单元或特定类型的单元组 - 多角多模式设计的场景 `report_power` 命令使用…...

详解MySQL的MVCC机制与间隙锁

在MySQL的InnoDB存储引擎中&#xff0c;MVCC&#xff08;多版本并发控制&#xff09;和间隙锁&#xff08;Gap Lock&#xff09;是两种关键的并发控制机制。MVCC主要用于提高读写并发性能&#xff0c;而间隙锁则用于实现更严格的事务隔离&#xff0c;防止幻读现象。以下是对MyS…...

新版校园跑腿外卖独立版+APP+小程序前端外卖配送平台源码

源码介绍&#xff1a; 同城校园跑腿外卖配送平台源码&#xff0c;支持自定义diy 你可以设计你的页面&#xff0c;设计你自己的风格&#xff0c;支持多校园&#xff0c;独立版本&#xff0c;多商户&#xff0c;有用户端&#xff0c;骑手端&#xff0c;商家端&#xff0c;强大的…...

# ROS 获取激光雷达数据 (Python实现)

ROS 获取激光雷达数据 (Python实现) 实现思路 构建一个新的软件包&#xff0c;包名叫做lidar_pkg在软件包中新建一个节点&#xff0c;节点名叫做lidar_node.py在节点中&#xff0c;向ROS大管家rospy申请订阅话题/scan&#xff0c;并设置回调函数为Lidarcallback()构建回调函数…...

单点登录(SSO)前端怎么做

单点登录&#xff08;SSO&#xff09;前端怎么做 本文介绍单点登录&#xff08;SSO&#xff09;是什么&#xff0c;还有就是前端怎么做。 单点登录&#xff08;SSO&#xff09;是什么 单点登录&#xff08;SSO&#xff0c;Single Sign On&#xff09;&#xff0c;是在企业内部…...

【面试干货】索引的作用

【面试干货】索引的作用 1、索引的作用 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1、索引的作用 索引 可以协助 快速查询、更新数据库表中数据。 通过使用索引&#xff0c;数据库系统能够快速定位到符合查询条件的数据&#xff0c;提…...

【成品设计】基于红外线的目标跟踪无线测温系统设计

《基于红外线的目标跟踪无线测温系统设计》 整体功能&#xff1a; A端&#xff1a;无线跟踪端 主控&#xff1a;采用STM32F103C8T6单片机作为核心控制。360度编码模块数字脉冲输出红外解码编码模块OLED屏幕。 B端&#xff1a;无线待测端 主控&#xff1a;采用STM32F103C8T…...

抽象,自定义函数,递归

6.1懒惰是一种美德 如果你 在一个地方编写了一些代码&#xff0c;但需要在另一个地方再次使用&#xff0c;该如何办呢&#xff1f; 假设你编写了一段代码&#xff0c;它计算一些斐波那契数&#xff08;一种数列&#xff0c;其中每个数都是前两个数的和&#xff09;。 现在的…...

php设计模式之策略模式详解

策略模式&#xff08;Strategy Pattern&#xff09;是一种行为设计模式&#xff0c;它使你能在运行时改变对象的行为。在PHP中应用策略模式可以让你轻松地根据需要选择和交换算法或策略&#xff0c;而无需修改使用这些算法的代码。 策略模式的核心概念&#xff1a; 目的&…...

Android在不同层面增加应用

1 App 应用代码一般在开发者的项目目录下&#xff0c;packages/apps/YourApp/&#xff0c;比如app/src/main/java目录下 对于系统应用&#xff0c;源代码可能位于packages/apps/目录下&#xff0c;例如packages/apps/Settings。 用户安装的应用&#xff08;从Google Play或其…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

AI病理诊断七剑下天山,医疗未来触手可及

一、病理诊断困局&#xff1a;刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断"&#xff0c;医生需通过显微镜观察组织切片&#xff0c;在细胞迷宫中捕捉癌变信号。某省病理质控报告显示&#xff0c;基层医院误诊率达12%-15%&#xff0c;专家会诊…...

Ubuntu系统复制(U盘-电脑硬盘)

所需环境 电脑自带硬盘&#xff1a;1块 (1T) U盘1&#xff1a;Ubuntu系统引导盘&#xff08;用于“U盘2”复制到“电脑自带硬盘”&#xff09; U盘2&#xff1a;Ubuntu系统盘&#xff08;1T&#xff0c;用于被复制&#xff09; &#xff01;&#xff01;&#xff01;建议“电脑…...

鸿蒙Navigation路由导航-基本使用介绍

1. Navigation介绍 Navigation组件是路由导航的根视图容器&#xff0c;一般作为Page页面的根容器使用&#xff0c;其内部默认包含了标题栏、内容区和工具栏&#xff0c;其中内容区默认首页显示导航内容&#xff08;Navigation的子组件&#xff09;或非首页显示&#xff08;Nav…...