当前位置: 首页 > 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或其…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建&#xff08;全平台详解&#xff09; 在开始使用 React Native 开发移动应用之前&#xff0c;正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南&#xff0c;涵盖 macOS 和 Windows 平台的配置步骤&#xff0c;如何在 Android 和 iOS…...

大数据零基础学习day1之环境准备和大数据初步理解

学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 &#xff08;1&#xff09;设置网关 打开VMware虚拟机&#xff0c;点击编辑…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...

RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill

视觉语言模型&#xff08;Vision-Language Models, VLMs&#xff09;&#xff0c;为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展&#xff0c;机器人仍难以胜任复杂的长时程任务&#xff08;如家具装配&#xff09;&#xff0c;主要受限于人…...

Windows安装Miniconda

一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...

为什么要创建 Vue 实例

核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...

32单片机——基本定时器

STM32F103有众多的定时器&#xff0c;其中包括2个基本定时器&#xff08;TIM6和TIM7&#xff09;、4个通用定时器&#xff08;TIM2~TIM5&#xff09;、2个高级控制定时器&#xff08;TIM1和TIM8&#xff09;&#xff0c;这些定时器彼此完全独立&#xff0c;不共享任何资源 1、定…...

PydanticAI快速入门示例

参考链接&#xff1a;https://ai.pydantic.dev/#why-use-pydanticai 示例代码 from pydantic_ai import Agent from pydantic_ai.models.openai import OpenAIModel from pydantic_ai.providers.openai import OpenAIProvider# 配置使用阿里云通义千问模型 model OpenAIMode…...