场景:Java代码将字符串转流,用SFTP工具类上传到SFTP服务器
模拟:自己在Linux服务器搭建了SFTP
问题:com.jcraft.jsch.JSchException: session is down
代码:

SFTP工具类中的连接SFTP服务器方法,每次都在channel.connect()报错

ChannelSftp sftp = null;
    try {
        JSch jsch = new JSch();
        //jsch.getSession(username, host, port);
        Session sshSession = jsch.getSession(username, host, port);
        System.out.println("Session created.");
        sshSession.setPassword(password);
        Properties sshConfig = new Properties();
        sshConfig.put("StrictHostKeyChecking", "no");
        sshSession.setConfig(sshConfig);
        sshSession.connect();
        System.out.println("Session connected.");
        System.out.println("Opening Channel.");
        Channel channel = sshSession.openChannel("sftp");
        channel.connect();
        sftp = (ChannelSftp) channel;
        System.out.println("Connected to " + host + ".");
    } catch (Exception e) {
        e.printStackTrace();
    }

报错原因:SFTP服务器的目录权限必须对于登录用户必须是755(drwxr-xr-x),如果是777(drwxrwxrwx),则会报错。另外,sftp服务器目录所有者必须是root。

Logo

更多推荐