【发布时间】:2023-03-19 00:24:01
【问题描述】:
我正在编写一个应用程序,它应该使用 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());
另一种方式:
// [...]
// 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());
后者导致 “invalid privatekey” 错误。除此之外,我不确定两者中哪一个更安全。
提前致谢。
【问题讨论】:
-
您应该将机密存储在Android Keychain 中。在您的情况下,密钥应该在文件系统上加密。然后,(1)提示用户输入密码;或 (2) 将密码存储在钥匙串中。如果始终存在交互式用户,则使用选项 (1)。选项 (2) 用于无人值守密钥存储,例如 wifi 密码。选项 (2) 可能是您的用例,但我们需要在此处详细了解您的服务的使用方式。