共享密钥时使用 java 客户端的 SFTP

SFTP with java client when keys are shared

我有两台服务器A和B。 我想通过 SFTP 将文件从服务器 A 传输到服务器 B。

服务器 A (~/.ssh/id_rsa.pub) 的

Public 密钥已添加到服务器 B 的 ~/.ssh/authorized_keys

从命令行,我可以在不输入密码的情况下从服务器 A 到 B 的 SFTP。 但是,从使用库 JschJava 客户端,我无法与服务器 B 建立 SFTP 连接,并且出现身份验证错误:

Error occurred during SFTP. Auth fail
com.jcraft.jsch.JSchException: Auth fail
    at com.jcraft.jsch.Session.connect(Session.java:519)
    at com.jcraft.jsch.Session.connect(Session.java:183)
    at Main.main(Main.java:15)

有没有一种方法可以在不指定密码的情况下使用 Java 客户端连接到服务器 B 以实现 SFTP 目的?

下面是我的Java代码供参考:

import com.jcraft.jsch.*;

public class Main {

    public static void main(String[] args) {

        JSch jsch = new JSch();
        Session session = null;

        try {
            session = jsch.getSession("processor", "remoteserver.myorg.com", 22);
            session.setConfig("StrictHostKeyChecking", "no");
            System.out.println("Trying to connect...");
            session.connect();
            System.out.println("Connected successfully.");

            Channel channel = session.openChannel("sftp");
            channel.connect();
            ChannelSftp sftpChannel = (ChannelSftp) channel;
            System.out.println("Doing SFTP...");
            sftpChannel.put("/tmp/test.txt", "/some/remote/folder");
            System.out.println("Success");
            sftpChannel.exit();
            session.disconnect();

        } catch (JSchException | SftpException e) {
            System.err.println("Error occurred during SFTP. " + e.getMessage());
            e.printStackTrace();
        }

    }
}

jsync中使用addIdentity()api并指向您的私钥文件位置。

参考: Can we use JSch for SSH key-based communication?

   String privateKey = "~/.ssh/id_rsa";    
   jsch.addIdentity(privateKey);
   System.out.println("identity added ");    
   Session session = jsch.getSession(user, host, port);
   System.out.println("session created.");