在连接Linux时,如果Linux的OpenSSH版本是8.8,可能会遇到连接失败的问题。这是因为从OpenSSH 8.8版本开始,它默认禁用了ssh-dss密钥算法,而JSch默认使用ssh-dss算法进行连接。

为了解决这个问题,你可以尝试以下两种方法:

  1. 指定使用其他的密钥算法: 在创建连接之前,可以使用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;
    }
    
  2. 更新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库,并将其添加到你的项目中。

尝试以上两种方法后,应该能够解决连接失败的问题

java使用jsch连接linux如果linux的openssh是88当前是连接不上的如何解决?连接代码如下public boolean createConnection 对密码进行解密 password = AesCryptdecryptpassword; JSch jSch = new JSch; try ses

原文地址: https://www.cveoy.top/t/topic/hMgn 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录