我有两个服务器A和B。我想要SFTP一个从服务器A到B的文件。
服务器A (~/.ssh/id_rsa.pub)的公钥已添加到服务器B的~/.ssh/authorized_keys中。
在命令行中,我可以从服务器A到服务器B进行SFTP,而无需输入密码。但是,从使用库Java的杰希客户端,我无法连接到服务器B,并且我得到了身份验证错误:
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,而无需指定密码?
下面是我的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();
}
}
}发布于 2018-11-21 11:08:26
在addIdentity()中使用jsync api并指向您的私钥文件位置。
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.");https://stackoverflow.com/questions/53410705
复制相似问题