【发布时间】:2022-12-16 16:59:20
【问题描述】:
我想使用 JSch 打开 SFTP 连接来下载一些文件。
String SFTPPRIVATEKEY = "/folder/privatekeyfile";
String SFTPUSER = "user";
String SFTPPASS = "";
String SFTPHOST = "server.tld";
String SFTPPORT = "22";
int usePrivateKey = 1;
public boolean connect() {
boolean isConnected = false;
try {
JSch jsch = new JSch();
if (usePrivateKey) {
jsch.addIdentity(SFTPPRIVATEKEY);
}
session = jsch.getSession(SFTPUSER,SFTPHOST,SFTPPORT);
if (!usePrivateKey) {
session.setPassword(SFTPPASS);
}
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect();
if (session.isConnected() == true) {
log.println("Connection to Session server is successfully");
}
channel = session.openChannel("sftp");
channel.connect();
channelSftp = (ChannelSftp)channel;
isConnected = true;
} catch (JSchException e) {
log.println("SFTPClient Connect ERROR: "+e.getMessage());
e.printStackTrace();
}
return isConnected;
}
如果我运行我的代码,我会得到:
com.jcraft.jsch.JSchException: USERAUTH 失败
我尝试在运行我的 Java 代码的同一客户端上的 shell 上使用
sftp进行连接。我跑sftp -i privatekeyfile user@server.tld它提示输入私钥文件的密码。我输入了密码,连接效果很好。
但是JSch没有连接。我找不到在 JSch 中设置密码的选项。也许这是问题所在?
你们能帮忙吗?
谢谢
【问题讨论】:
-
.ppk后缀通常用于 PuTTY 定义的 PPK 格式的文件(PPK = PuTTY 私钥),但包括sftp在内的 OpenSSH 不支持这些格式,因此您的文件实际上必须是其他格式,可能是Jsch 不支持。查看文件的第一行或第二行以确定它实际是什么格式。