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