共享密钥时使用 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。
但是,从使用库 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();
}
}
}
在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.");
我有两台服务器A和B。 我想通过 SFTP 将文件从服务器 A 传输到服务器 B。
服务器 A (~/.ssh/id_rsa.pub
) 的 Public 密钥已添加到服务器 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();
}
}
}
在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.");