在Android应用程序中从Java JSch中的字符串或资源加载私钥

tai*_*Bsu 7 java ssh android jsch

我正在编写一个应用程序,它应该使用 JSch 通过 SSH 访问我的私人服务器。因为我已经设置了公钥身份验证,所以我希望这个应用程序以相同的方式进行身份验证。我将是唯一一个使用此应用程序的人,因此我想将我的密钥直接存储在应用程序中(例如,硬编码)或在手机主目录中的某个位置分开存储。哪种是最好的存储方式,也许是作为项目中的资源文件?由于我对 Android 开发还很陌生,因此我不确定最好的方法是什么。

我试过的:

// [...]
String user = "my_user";
String ssh_pwd = "my_pwd";
String host = "my_host";
// stored as OpenSSH key - file not found error - where shoud I move this file?
String private_key = "./my_pk";

int port = 22;

// basic SSH connection stuff
JSch jsch = new JSch();
session = jsch.getSession(user, host, port);
jsch.addIdentity(private_key, ssh_pwd.getBytes());
Run Code Online (Sandbox Code Playgroud)

其它的办法:

// [...]
// private key in OpenSSH format as a plain string
String private_key = "xyz123abc456def789ghi012..."; 
// public key in OpenSSH format as a plain string
String public_key = "a1b2c3d4e5..."; 
// [...]
jsch.addIdentity("id_rsa", private_key.getBytes(), public_key.getBytes(), ssh_pwd.getBytes());
Run Code Online (Sandbox Code Playgroud)

后者导致“无效的私钥”错误。除此之外,我不确定两者中的哪一个是更安全的工作方式。

提前致谢。

Mar*_*ryl 4

String private_key = "xyz123abc456def789ghi012..."; // private key in OpenSSH format as a plain string
String public_key = "a1b2c3d4e5..."; // public key in OpenSSH format as a plain string
Run Code Online (Sandbox Code Playgroud)

JSch.addIdentity(最终)采用一个缓冲区KeyPair.load,其中包含ssh-keygen-m pem在最新版本的 OpenSSH 中)生成的密钥对文件的内容。

格式如下:

String private_key = "xyz123abc456def789ghi012..."; // private key in OpenSSH format as a plain string
String public_key = "a1b2c3d4e5..."; // public key in OpenSSH format as a plain string
Run Code Online (Sandbox Code Playgroud)
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAvc04a8wViYV5Kb4jX+MxEqN1vi9q9C7mPhf6DV+mb1ADNAiR
YeLqPMLCYUF2ViobcGfarb51gz7iB2TgkDmhQNK9XDCOUaGYN/FeZcN0JpzkjEjZ
ApbRfshj1h9qKQUW+38XKnltMtf4dxiuxkXph8P6IMVveTDs3sSbBPq560bdJ1AD
...
PEyVxlat2I4ShuLQiO1QIuS8ABu5yDM2EouB6vlxtGEBpIJItp7cyA==
-----END RSA PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)

private_key这不是您在和中使用的格式public_key


另请参阅JSch 从字符串添加私钥