我是Android开发的新手,我正在尝试使用私钥来访问远程服务器。我已将私钥放在res / raw文件夹中,但在尝试进行身份验证时,我正在努力解决如何访问私钥的文件路径。我之前已经将它用于Java项目。这是我到目前为止的副本。
private Session sshConnect() throws JSchException, IOException
{
try
{
//Login details
jschSession = jsch.getSession(sshUsername, sshServer, 22);
//Connect using private key and corresponding passphrase
jsch.addIdentity("./res/raw/id_rsa", passphrase);
//Ignore SSH key warnings
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
jschSession.setConfig(config);
//System.out.println(localPort);
jschSession.connect();
return jschSession;
}
catch (Exception ex)
{
throw new RuntimeException("SSH connection failed: " + ex.getMessage(), ex);
}
}
当我尝试运行
时会抛出以下错误 java.lang.RuntimeException: SSH connection failed: java.io.FileNotFoundException: ./res/raw/id_rsa: open failed: ENOENT (No such file or directory)
我尝试过以下尝试访问res文件夹的内容,没有运气:
jsch.addIdentity("file:///android_res/raw/id_rsa", passphrase);
答案 0 :(得分:1)
简单地说,您可以从原始文件夹中获取该文件。
InputStream privateKeyByteStream = getResources()
.openRawResource(
getResources().getIdentifier("private_key_without_extension", "raw", getPackageName()));
然后添加身份
jSch.addIdentity("anyIdentityName", privateKeyBytes, publicKeyBytes, passphrase);
答案 1 :(得分:0)
我不确定是否有办法将原始资源作为文件访问。
您可能需要将资源保存到临时路径,并参考addIdentity
。
要访问资源,请参阅:例如: Android how to get access to raw resources that i put in res folder?