我想使用 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 fail
我尝试在运行 Java 代码的同一客户端的 shell 上使用 sftp
进行连接。我运行
sftp -i privatekeyfile <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="a1d4d2c4d3e1d2c4d3d7c4d38fd5cdc5" rel="noreferrer noopener nofollow">[email protected]</a>
它提示输入私钥文件的密码。我输入了密码,连接效果很好。
但是 JSch 没有连接。我发现 JSch 中没有设置密码的选项。也许这就是问题所在?
你们中的一些人可以帮忙吗?
谢谢
最佳答案
有JSch.addIdentity
采用密码短语的重载:
public void addIdentity(String prvkey, String passphrase)
强制警告:请勿使用 StrictHostKeyChecking=no
盲目接受所有主机 key 。这是一个安全缺陷。您失去了针对 MITM attacks 的保护。有关正确(且安全)的方法,请参阅:How to resolve Java UnknownHostKey, while using JSch SFTP library?
关于java - 使用 JSch 中的密码加密的 key 进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74729053/