java使用jsch连接linux如果linux的openssh是88当前是连接不上的如何解决?连接代码如下public boolean createConnection 对密码进行解密 password = AesCryptdecryptpassword; JSch jSch = new JSch; try ses
在连接Linux时,如果Linux的OpenSSH版本是8.8,可能会遇到连接失败的问题。这是因为从OpenSSH 8.8版本开始,它默认禁用了ssh-dss密钥算法,而JSch默认使用ssh-dss算法进行连接。
为了解决这个问题,你可以尝试以下两种方法:
-
指定使用其他的密钥算法: 在创建连接之前,可以使用
jSch.setConfig()方法来指定使用其他的密钥算法。例如,你可以使用session.setConfig("PubkeyAcceptedKeyTypes", "ssh-rsa")来指定使用ssh-rsa算法进行连接。修改后的代码如下:
public boolean createConnection() { //对密码进行解密 password = AesCrypt.decrypt(password); JSch jSch = new JSch(); try { session = jSch.getSession(userName, ip, port); session.setPassword(password); session.setConfig("StrictHostKeyChecking", "no"); session.setConfig("PubkeyAcceptedKeyTypes", "ssh-rsa"); // 指定使用ssh-rsa算法 // 启动连接 session.connect(); } catch (JSchException e) { e.printStackTrace(); LOGGER.info("IP: {} 连接失败!", ip); return false; } return true; } -
更新JSch库版本: 如果指定其他密钥算法后仍然无法连接,可能是因为JSch库版本较旧,不支持OpenSSH 8.8版本的新特性。你可以尝试更新JSch库到最新版本,以兼容新的OpenSSH版本。
如果使用Maven进行依赖管理,可以在
pom.xml文件中更新JSch库的版本:<dependencies> ... <dependency> <groupId>com.jcraft</groupId> <artifactId>jsch</artifactId> <version>0.1.55</version> <!-- 更新到最新版本 --> </dependency> ... </dependencies>如果不使用Maven,可以手动下载最新版本的JSch库,并将其添加到你的项目中。
尝试以上两种方法后,应该能够解决连接失败的问题
原文地址: https://www.cveoy.top/t/topic/hMgn 著作权归作者所有。请勿转载和采集!