共享密钥时使用 Java 客户端的 SFTP [重复]

Posted

技术标签:

【中文标题】共享密钥时使用 Java 客户端的 SFTP [重复]【英文标题】:SFTP with java client when keys are shared [duplicate] 【发布时间】:2019-04-23 22:36:43 【问题描述】:

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

服务器 A 的公钥 (~/.ssh/id_rsa.pub) 已添加到服务器 B 的 ~/.ssh/authorized_keys

从命令行,我可以在不输入密码的情况下从服务器 A 到 B 的 SFTP。 但是,从使用库 Jsch 的 Java 客户端我无法与服务器 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();
        

    

【问题讨论】:

【参考方案1】:

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.");

【讨论】:

请不要回答重复的问题。投票将它们作为重复关闭。

以上是关于共享密钥时使用 Java 客户端的 SFTP [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在java中通过SFTP传输文件? [复制]

java SSL服务器和客户端的Java示例,以及如何生成密钥库

跨所有 cPanel 站点的基于密钥的登录

使用私钥通过 pysftp 连接到 SFTP 服务器时“找不到主机 ***** 的主机密钥”

https的加密机制,怎么加密

密钥对及sftp文件接口