java - 使用 JSch 中的密码加密的 key 进行身份验证

标签 java ssh sftp jsch

我想使用 JSch 打开 SFTP 连接来下载一些文件。

String SFTPPRIVATEKEY = "/folder/privatekeyfile";
String SFTPUSER = "user";
String SFTPPASS = "";
String SFTPHOST = "server.tld";
String SFTPPORT = "22";
int usePrivateKey = 1;

public boolean connect() {
    boolean isConnected = false;
    try {
        JSch jsch = new JSch();
        
        if (usePrivateKey) {
            jsch.addIdentity(SFTPPRIVATEKEY);
        }
        
        session = jsch.getSession(SFTPUSER,SFTPHOST,SFTPPORT);
        if (!usePrivateKey) {
            session.setPassword(SFTPPASS);
        }
        
        java.util.Properties config = new java.util.Properties();
        config.put("StrictHostKeyChecking", "no"); 
        session.setConfig(config);
        session.connect();
        if (session.isConnected() == true) {
            log.println("Connection to Session server is successfully");
        }
        channel = session.openChannel("sftp");
        channel.connect();
        channelSftp = (ChannelSftp)channel;
        isConnected = true;
    } catch (JSchException e) {
        log.println("SFTPClient Connect ERROR: "+e.getMessage());
        e.printStackTrace();
        
    }
    return isConnected;
}

如果我运行我的代码,我会得到:

com.jcraft.jsch.JSchException: USERAUTH fail

我尝试在运行 Java 代码的同一客户端的 shell 上使用 sftp 进行连接。我运行

sftp -i privatekeyfile <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="a1d4d2c4d3e1d2c4d3d7c4d38fd5cdc5" rel="noreferrer noopener nofollow">[email protected]</a>

它提示输入私钥文件的密码。我输入了密码,连接效果很好。

但是 JSch 没有连接。我发现 JSch 中没有设置密码的选项。也许这就是问题所在?

你们中的一些人可以帮忙吗?
谢谢

最佳答案

JSch.addIdentity采用密码短语的重载:

public void addIdentity(String prvkey, String passphrase)

强制警告:请勿使用 StrictHostKeyChecking=no 盲目接受所有主机 key 。这是一个安全缺陷。您失去了针对 MITM attacks 的保护。有关正确(且安全)的方法,请参阅:How to resolve Java UnknownHostKey, while using JSch SFTP library?

关于java - 使用 JSch 中的密码加密的 key 进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74729053/

相关文章:

java - 需要帮助在java中加入spark RDD

java - 在同一行打印列名

linux - 使用 Windows IDE 在 Linux 上处理远程项目

ssh - Ansible SSH 作为一个用户,Sudo 作为另一个用户

python - python中将windows上写的psftp命令转换到linux上

java - 使用 Jackson 反序列化包含在具有未知属性名称的对象中的 JSON

git - 远程容器 - 无法通过 SSH key 使用 Git

java - 如何在 Apache Mina sshd-core 版本 0.14.0 中覆盖 getVirtualUserDir()

linux - 在 sftp 命令中列出文件并以毫秒显示其时间戳的命令

java - 预期为简单错误 '('