共享密钥时使用 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 SSL服务器和客户端的Java示例,以及如何生成密钥库