Java JSCH-传递私钥字符串而不是文件路径
如何将私钥(内容而不是文件)传递给JSCH(用于sftp) 不使用Java JSCH-传递私钥字符串而不是文件路径,java,jsch,Java,Jsch,如何将私钥(内容而不是文件)传递给JSCH(用于sftp) 不使用KeyPair.load(JSch-JSch,String-prvfile,String-pubfile)您可以使用重载方法KeyPair.load(JSch-JSch,byte[]prvkey,byte[]pubkey)。它应该支持直接加载内容。来源:apidoc。我一直在努力解决同样的问题,但我找到了一个解决方案,您必须在包含私钥的字符串中添加回车字符,并将其转换为ASCII码: private static byte[] r
KeyPair.load(JSch-JSch,String-prvfile,String-pubfile)
您可以使用重载方法KeyPair.load(JSch-JSch,byte[]prvkey,byte[]pubkey)
。它应该支持直接加载内容。来源:apidoc。我一直在努力解决同样的问题,但我找到了一个解决方案,您必须在包含私钥的字符串中添加回车字符,并将其转换为ASCII码:
private static byte[] readKey(String keyFileContent){
keyFileContent = keyFileContent.replace("-----BEGIN RSA PRIVATE KEY-----", "-----BEGIN RSA PRIVATE KEY-----\r\n").replace("-----END RSA PRIVATE KEY-----", "\r\n-----END RSA PRIVATE KEY-----");
return keyFileContent.getBytes(StandardCharsets.US_ASCII);
}
然后,可以通过以下方式调用addIdentity函数:
jsch.addIdentity("myconnection", readKey(privateKeyString), null, null);
然后,您可以按照文档中的示例进行操作:
您无需添加任何内容。正确格式的键包含新行。如果你必须添加它们,那只是因为你之前已经删除了它们。我在用Android读取文件时遇到了这个问题,我相信这取决于你如何读取文件,也许最好是使用正则表达式检查是否存在回车符和换行符,并在必要时添加它们。也许你应该添加一个完整的代码,包括阅读部分。否则你的回答就没有意义了。