问题描述
我有 SFTP 密钥对文件的内容作为字符串。我需要使用 JSch 添加内容,但 addIdentity 只接受文件路径。无论如何我可以做到这一点吗?公钥已经上传到主机。我使用私钥通过 WinSCP 测试了连接,并且成功了。当我尝试从 Java 进程连接时,我得到了
[2021-01-12 11:00:41,518] [ERROR] [jobLauncherTaskExecutor-1] [c.j.p.d.u.FileUtil] [] : Exception :
com.jcraft.jsch.JSchException: USERAUTH fail
at com.jcraft.jsch.UserAuthPublicKey.start(UserAuthPublicKey.java:119)
以下是代码片段:
Session session = null;
Channel channel = null;
ChannelSftp channelSftp = null;
String privateKeyPath = "-----BEGIN RSA PRIVATE KEY-----\n" +
"Proc-Type: 4,ENCRYPTED\n" +
"hkjhbkkhbkbkhbkjhbkjbkjhbkjb\n" +
"-----END RSA PRIVATE KEY-----\n";
String passphrase = "passphrase";
JSch jsch = new JSch();
try (FileInputStream fileInputStream = new FileInputStream(new File(fileName));){
jsch.addIdentity(sftpHost,privateKeyPath.getBytes(),null,passphrase.getBytes());
session = jsch.getSession(sftpUser,sftpHost,sftpPort);
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking","no");
session.setConfig(config);
session.connect();
log.info("Host connected.");
channel = session.openChannel("sftp");
channel.connect();
log.info("sftp channel opened and connected.");
channelSftp = (ChannelSftp) channel;
channelSftp.cd(sftpWorkingFolder);
channelSftp.put(fileInputStream,new File(fileName).getName());
} catch (JSchException | SftpException | IOException e) {
log.error("Exception : ",e);
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)