使用Android的Jsch addidentity

时间:2015-02-11 22:47:52

标签: android jsch private-key

我是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);

2 个答案:

答案 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?